Javascript:什么时候创建全局脚本
在下面的函数中,全局变量将在什么时候创建;执行test()之前还是之后Javascript:什么时候创建全局脚本,javascript,Javascript,在下面的函数中,全局变量将在什么时候创建;执行test()之前还是之后 var test = function(){ foo = 5 } test() 编辑:我指的是foo变量 …在执行test()之前还是之后 var test = function(){ foo = 5 } test() 它取决于您所引用的全局变量,test或foo 对于测试:之前变量声明被“挂起”,它们在执行它们出现的范围内的任何分步代码之前被处理;全局代码在脚本中全局范围内的任何分步代码之前执行。(后续脚本
var test = function(){
foo = 5
}
test()
编辑:我指的是foo变量
…在执行test()之前还是之后
var test = function(){
foo = 5
}
test()
它取决于您所引用的全局变量,test
或foo
对于测试
:之前<代码>变量
声明被“挂起”,它们在执行它们出现的范围内的任何分步代码之前被处理;全局代码在脚本中全局范围内的任何分步代码之前执行。(后续脚本将分别处理,首先是vars,然后是分步代码。)
对于foo
:在
该代码的顺序为:
测试
使用值未定义
创建test=function(){foo=5}
test
test()
foo=5
完成,创建了一个名为foo
的隐式全局变量(更多信息请访问我的博客:)当解释器尝试分配变量
foo
时,将创建变量foo
,因此在函数执行期间
var test = function(){
foo = 5
}
window.hasOwnProperty('foo'); // false
test()
window.hasOwnProperty('foo'); // true
这很容易测试:
//函数中的代码不会被计算(函数中的任何变量也不会被提升)
//直到调用该代码为止
var测试=函数(){
foo=5;
}
//如果说foo是未定义的,那么这将失败,因此我们知道
//还没有创建
//console.log(foo);
//调用函数并强制计算其中的代码
测试()
//工作。已经创建了全局。。
console.log(foo)代码>在您的代码中
var test = function(){ foo = 5};
test();
test是保存函数对象的全局变量。它是在全局执行环境中调用test()函数之前创建的
foo也是全局变量,因为不存在var、let或const关键字。但它将在调用test()函数后创建。如果您能澄清您是否对test
或foo
@Pointy感兴趣,那将很有帮助,我想他会询问foo
,由于它是在没有var
的情况下创建的,并且被设计成globalIt,所以实际上还是可以这么说的。您可以安全地使用console.log(typeof foo)
来查看它是否被创建(之前是“未定义的”
,之后是“数字”
)。还有this.hasOwnProperty(“foo”)
(或window.hasOwnProperty(“foo”)
)。@T.J.Crowder是的,但我以这种方式展示它有两个原因。1) 获取错误是未创建变量的非常有说服力的证据,2)这是最简单的测试。“获取错误是未创建变量的非常有说服力的证据”:-D Truefoo
不是局部变量-它是全局变量,在test()返回后将保持不变。有关示例,请参见下面的代码片段。@scott u是对的,我忽略了没有var、let或constkeyword@RafiqueAhmed你“忽略”了一件非常大的事情——这就是问题所在……而你已经纠正了你的局部和全局错误。你还没有回答老年退休金计划的问题。