在下面的函数中,在什么时候创建全局变量;在执行test()之前还是之后?
var test = function(){
foo = 5
}
test()
编辑:我指的是foo变量
答案 0 :(得分:3)
..执行
test()
之前或之后?
这取决于您所指的全局变量,test
或foo
。
test
:之前。 var
声明被“提升”,它们在执行它们的范围内的任何分步代码之前被处理;全局的代码在该脚本的全局范围内的任何分步代码之前执行。 (后续脚本分别处理,第一个变量,然后是逐步代码。)
对于foo
:期间。
该代码的顺序是:
test
创建全局undefined
。test = function() { foo = 5 }
test
test()
已执行
foo = 5
已完成,创建了一个名为foo
的隐式全局(我的博客上更多内容:The Horror of Implicit Globals)答案 1 :(得分:2)
当解释器尝试分配变量foo
时,将创建变量foo
,因此在函数执行期间。
var test = function(){
foo = 5
}
window.hasOwnProperty('foo'); // false
test()
window.hasOwnProperty('foo'); // true
答案 2 :(得分:2)
这很容易测试:
// The code within the function won't be evaluated (nor any variables within it be hoisted)
// until that code is invoked
var test = function(){
foo = 5;
}
// This will fail saying that foo is undefined, so we know that the global
// hasn't been created yet
//console.log(foo);
// Call the function and force the code within it to be evaluated
test()
// Works. The global has been created..
console.log(foo);
答案 3 :(得分:0)
在您的代码中
var test = function(){ foo = 5};
test();
test 是保存Function对象的全局变量。它是在全局执行环境中的test()函数调用之前创建的。
foo 也是全局变量,因为没有var,let或const关键字。但它将在调用test()函数后创建。