1.可変プロモーション
実際の宣言がどこにあっても、変数の宣言は関数またはグローバルスコープの最上位に昇格します(そして代入演算は元の位置にあります)
2.可変スコープ
ES5では、jsのスコープの形式はグローバルスコープと関数スコープの2つだけ
です。1。グローバルスコープは実際にはグローバルオブジェクトのスコープであり、どこからでもアクセスできます
。2。関数外の変数は関数内でアクセスできます。関数内には関数外からアクセスできません
var i = 2; //全局变量,全局作用域
function outer(){
//定义外部函数
console.log(i); //访问全局变量 2
function inner(){
//定义内部函数
console.log(i); //访问全局函数 2
}
inner();
}
outer();
console.log(i); //2
3.ケース
//函数作用域内的变量外部是无法访问的
function foo() {
// 函数作用域内var会使变量提升到函数最顶部
var name = 'nick'
}
foo()
console.log(name) //会报错
// 函数内声明相同的变量
var name = 'nick';
function foo() {
var name = 'nancy';
console.log(name);
}
foo(); // => 'nancy'
console.log(name); // => 'nick'
//在控制语句内声明的变量,在控制语句外面也可以使用
if (true) {
var a = 1
}
for (var i = 1; i < 10; i++) {
}
console.log(a, i); // => 1 10
// 在控制语句内声明一个与外部同名的变量。
var b = 1;
if (true) {
var b = 10; // 与外部 x 变量同名
}
console.log(b); // => 10