js变量的作用域
在js中,var定义的变量是有作用域的。
假设在函数体中声明,则在函数体外不可以使用
function f(){
var x = 1;
x = x + 1;
}
x = x + 2; //uncaught ReferenceError:x is not defined
如果两个函数使用了相同的变量名,只要在函数内部,就不会冲突
function f1(){
var x = 1;
x = x + 1;
}
function f2(){
var x = 1;
x = x + 1;
}
内部函数可以访问外部函数的成员,反过来就不行
function f1(){
var x = 1;
function f2(){
var y = x + 1;
}
var z = y + 1; //Uncaught ReferenceError:y is not defined
}
假设内部函数和外部函数的变量名重名
由内向外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量
function f1(){
var x = 1;
function f2(){
var x = "A";
console.log("inner"+x);
}
f2();
console.log("outer"+x);
}
f1();
提升变量的作用域 建议将变量申明全放在函数首端
function f(){
var x = "x" + y;
console.log(x);
var y = 'y';
}
function f(){
var y;
var x = "x" + y;
console.log(x);
y = 'y';
}
全局
"use strict"
let x = 1;
function f(){
console.log(x);
}
f();
console.log(x);
默认所有的全局变量绑定在window上
alert()函数本身也是window对象之一,如果被覆盖就会失效
规范
由于我们所有的全局变量都会绑定到我们的window上,如果不同的js文件,使用了相同的全局变量,如何减少冲突?
将自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题
JQuery
局部
let关键字 解决局部作用域冲突的问题
常量 const
const PI = "3.14";