|
@@ -0,0 +1,82 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html lang="en">
|
|
|
+<head>
|
|
|
+ <meta charset="UTF-8">
|
|
|
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
|
+ <title>Document</title>
|
|
|
+ <style type="text/css">
|
|
|
+ label{
|
|
|
+ display: inline-block;
|
|
|
+ width:80px;
|
|
|
+ margin-top: 15px;
|
|
|
+ }
|
|
|
+ input{
|
|
|
+ margin-top: 15px;
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+</head>
|
|
|
+<body>
|
|
|
+ <select id="citySelect"></select>
|
|
|
+ <select id="countrySelect"></select>
|
|
|
+
|
|
|
+ <script type="text/javascript">
|
|
|
+ //Замыкания
|
|
|
+ ////////////////////////////////////////////////////////////////////////////////////
|
|
|
+ //makeProfileTimer
|
|
|
+ /////////////////////////////////////////////////////////////////////////////////////
|
|
|
+//2 makeSaver
|
|
|
+
|
|
|
+function makeSaver(validator){
|
|
|
+ var check = false
|
|
|
+ var result
|
|
|
+return function(){
|
|
|
+ //debugger
|
|
|
+ //let result
|
|
|
+ if(check === false){
|
|
|
+ result = validator()
|
|
|
+ check = true
|
|
|
+ return result}
|
|
|
+ else { return result}
|
|
|
+}
|
|
|
+}
|
|
|
+
|
|
|
+var saver = makeSaver(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
|
|
|
+ // в примере). На этом этапе Math.random НЕ вызывается
|
|
|
+ var value1 = saver() //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
|
|
|
+ var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
|
|
|
+ //в makeSaver функцию;
|
|
|
+ value1 === value2 // всегда true
|
|
|
+
|
|
|
+ var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)])
|
|
|
+ var value3 = saver2()
|
|
|
+ var value4 = saver2()
|
|
|
+
|
|
|
+ value3 === value4 // тоже должно быть true
|
|
|
+//////////////////////////////////////////////////////////////////////////////
|
|
|
+//Final Countdown
|
|
|
+//////////////////////////////////////////////////////////////////////////////
|
|
|
+//myBind
|
|
|
+function myBind(func,thisArg,staticArg){
|
|
|
+ return function (){
|
|
|
+ for (var key of arguments){
|
|
|
+ for (var arg in staticArg){
|
|
|
+ if(typeof(staticArg[arg]) == "undefined"){
|
|
|
+ staticArg[arg] = key
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return func.apply(thisArg,staticArg)
|
|
|
+ }
|
|
|
+}
|
|
|
+//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+//Рекурсия
|
|
|
+//Sum
|
|
|
+
|
|
|
+//HTML Tree
|
|
|
+
|
|
|
+//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
+ </script>
|
|
|
+</body>
|
|
|
+</html>
|