第一个示例记录 3 因为
any variable that is initialized inside a function using the var keyword will have a local scope. If a variable is initialized inside a function without var, it will have a global scope.
所以在第一种情况下,当局部x
被分配时,由于它未初始化,它被分配 3。
而在第二种情况下,x
指的是全局变量,因为函数内部x
没有声明。x
相反,如果你尝试这个
<script>
x = 5;
$(function() {
x = x || 3;
console.log(x);
});
</script>
或者
<script>
x = 5;
$(function() {
var x = window.x || 3;
console.log(x);
});
</script>
你会得到预期的结果5
。
此外,与 C 及其家族(具有块级作用域)不同,JavaScript 具有函数级作用域。块,例如 if 语句,不会创建新范围。只有函数会创建新范围。
所以如果我要写类似的东西
#include <stdio.h>
int main() {
int x = 1;
printf("%d, ", x); // 1
if (1) {
int x = 2;
printf("%d, ", x); // 2
}
printf("%d\n", x); // 1
}
输出:1,2,1
相比于
var x = 1;
console.log(x); // 1
if (true) {
var x = 2;
console.log(x); // 2
}
console.log(x); // 2
输出:1,2,2
阅读这篇关于JavaScript 作用域和提升的优秀博客文章,以更好地理解它。