Будет ли JavaScript создавать глобальный х? - PullRequest
0 голосов
/ 29 мая 2018

Мне было интересно в этом примере, станет ли x глобальной переменной, как если бы она не была объявлена ​​внутри локальной функции?Будет ли JavaScript выходить из локальной функции, искать, пока он не найдет x, а затем неявно создаст глобальный x?

function f(){
 var ar=[],i;
 for(i=0;i<3;i++){
//this time instead of passing i, the funciton has a local value called 
x 

arr[i]=(function(x)){
  return function(){
    return x;
  };
}(i));
}
return arr; 
}

1 Ответ

0 голосов
/ 29 мая 2018

Попробуйте запустить приведенный ниже код и обратите внимание, как мы добавили () для функции x.Возьмите их и обратите внимание на разницу в console.log.Ваш отредактированный вопрос довольно тупой.Просто console.log (x) и посмотрим, что произойдет

var WINDOW_PROPS = Object.keys(window);



arr =[]
function f(){
    for(i = 0; i < 3; i++) {       
        arr[i] = (function(x){                               
                  return function (){
                         return x*x;
                  }();
        }(i));
        console.log(arr[i])
    }
    
    var GLOBALS = Object.keys(window)
    // filter the props which your code did not declare
    .filter(prop => WINDOW_PROPS.indexOf(prop) < 0)
    // prettify output a bit :) It's up to you...
    .map(prop => `${typeof window[prop]} ${prop} ${window[prop]}`)
    // sort by types and names to find easier what you need
    .sort();

    console.log(GLOBALS.join("\n"));

    return arr;
    
    
} 

f()
...