栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

全局变量在JavaScript中具有未定义的值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

全局变量在JavaScript中具有未定义的值

这种现象称为:Javascript变量提升 。您绝对不会在函数中访问全局变量。您只访问局部

value
变量。

您的代码等效于以下内容:

var value = 10;function test() {    var value;    console.log(value);    value = 20;    console.log(value);}test();

还感到惊讶

undefined
吗?


说明:

每个Javascript程序员迟早都会碰到这一点。简单地说,任何变量声明总是悬挂到本地盖顶部。因此,即使您在第一次

console.log
调用后声明了变量,也仍然会认为它是在此之前声明的。但是,只有声明部分被提升;另一方面,分配不是。

因此,当您第一次调用时

console.log(value)
,您引用的是本地声明的变量,该变量尚未分配任何内容。因此
undefined

var test = 'start';function end() {    test = 'end';    var test = 'local';}end();alert(test);

您认为这会引起什么警报?不,不要只是继续阅读,请考虑一下。有什么价值

test

如果您说的不是

start
,则您错了。上面的代码与此等效:

var test = 'start';function end() {    var test;    test = 'end';    test = 'local';}end();alert(test);

这样全局变量就不会受到影响。

正如你所看到的,无论在哪里你把你的变量声明中,它始终是悬挂到本地盖顶部。


边注:

这也适用于功能。

test("Won't work!");test = function(text) { alert(text); }

这将为您提供参考错误:

未捕获的ReferenceError:未定义测试

因为这段代码可以正常工作,所以这使很多开发人员不满意:

test("Works!");function test(text) { alert(text); }

如上所述,其原因是 悬挂分配部件。因此,在第一个示例中,在

test("Won'twork!")
运行时,
test
已经声明了该变量,但是尚未为其分配功能。

在第二个示例中,我们不使用变量赋值。相反,我们使用了正确的函数声明语法,这确实使函数完全提升了。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号