我不完全理解为什么以下显示"悬挂"到最后.
var x = 'set';
var y = function ()
{
// WHAT YOU DON'T SEE -> var x;
// is effectively "hoisted" to this line!
if (!x)
{
// You might expect the variable to be populated at this point...it is not
// though, so this block executes
var x = 'hoisted';
}
alert(x);
}
//... and this call causes an alert to display "hoisted"
y();
Run Code Online (Sandbox Code Playgroud)
任何指针将不胜感激.
为什么x下面示例中的变量返回undefined而不是25?
var x = 25;
(function() {
console.log(x);
var x = 10;
})();Run Code Online (Sandbox Code Playgroud)
我在这里对可变提升概念有点困惑。为什么第一个console.log(flag)输出undefined?它不应该捕获已经初始化的 false 值在作用域链中向上移动吗?
var flag = false;
(function(){
console.log(flag);
var flag = true; // JavaScript only hoists declarations, not initialisations
console.log(flag);
if(flag){
let name = "John";
const age = "24";
console.log(name);
console.log(age);
}
//console.log(name); //ReferenceError: name is not defined ( as name is block scoped here )
//console.log(age); //ReferenceError: age is not defined ( as age is block scoped )
})();Run Code Online (Sandbox Code Playgroud)
如果在同一个函数中重新声明和定义了相同的全局变量,为什么这个全局变量在函数中未定义?
var a = 1;
function testscope(){
console.log(a, 'inside func');
//var a=2;
};
testscope();
console.log(a, 'outside func');
output:
1 "inside func"
1 "outside func"
Run Code Online (Sandbox Code Playgroud)
考虑相同的代码,其中 var a = 2; 内部功能块未注释
var a = 1;
function testscope(){
console.log(a, 'inside func');
var a=2;
};
testscope();
console.log(a, 'outside func');
Output
undefined "inside func"
1 "outside func"
Run Code Online (Sandbox Code Playgroud)