变量的作用域
定义在函数外的变量就是全部变量
JS中,var声明的变量是有作用域的
在函数体内声明,函数体外不可以使用(闭包可实现)
function fun(){
var x=1;
x=x+1
}
x=x+2 // x is not defined
如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
function fun1(){
var x=1;
x=x+1
}
function fun2(){
var x=‘A’;
x=x+1
}
内部函数可以访问外部函数定义的变量,反之则不行
function qj(){
var x =1;
function qj2(){
var y=x+1; //2
}
var z=y+1; //y is not defined
}
内部函数和外部函数变量重名,函数查找从自身函数开始,由“内”像“外”
function qj(){
var x =1;
function qj2(){
var x='A';
console.log(x) //A
}
console.log(x) //1
}
规范:
全局变量都会绑定到window上,如果不同的js文件使用相同的全局变量,冲突—如何减少?
//唯一的全局变量
var KuApp={}
把自己的代码全部放在自己定义的唯一名字中,降低命名冲突
局部作用域 let
f
unction aaa{
for(var i=0,i<100;i++){
console.log(i)
}
console.log(i+1) //这个i可以用
}
Es6 let关键字,解决局部作用域冲突,建议使用let定义局部作用域
function aaa{
for(let i=0,i<100;i++){
console.log(i)
}
console.log(i+1) //这个i is not undefined
}
const 常量
const
只读变量,不能修改