【发布时间】:2019-10-08 22:41:51
【问题描述】:
我已将userid 声明为全局变量,在函数内部我已为userid 赋值并声明了一个新函数userid(),但始终在内部函数声明之前返回。
为什么我无法更改全局变量。
var userid = 'test1';
function foo() {
userid = 'test2';
return;
function userid() {}
}
foo();
console.log(userid);
它返回test1,但预期结果应该是test2。
如果我删除它
function userid() {}
它工作正常。 我知道它的 java 脚本 Hoisting 在这里播放,但为什么以及如何?
【问题讨论】:
-
你为什么要写这样的东西?这个问题的意义何在?
-
我真的不明白你为什么要定义一个与变量同名的函数,为什么要在
foo()方法内将test2分配给userid。跨度> -
我也觉得这个问题很奇怪,但很有趣。如果您删除“function userid() {}”行,它将按预期工作(控制台将显示“test2”。我不得不承认我不知道为什么返回后的那行会改变预期的行为。跨度>
-
请检查这个答案:stackoverflow.com/questions/26927617/…,它比我能更好地解释“奇怪”的行为。
-
我正在测试 javascript 提升并发现这种奇怪的行为,我不明白我刚刚声明了本地函数而不是同名变量。
标签: javascript