持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天点击查看活动详情
var作用域
在JavaScript中,var定义变量实际是有作用域的。 假设在函数体中声明,则在函数体外不可以使用~(闭包)
function xitu(){
var x=1;
x=x+1;
}
x=x+2; //Uncaught ReferenceError: x is not defined
-
如果两个函数使用了相同的变量名
-
内部函数可以访问外部函数的成员,但外部函数不能调用内部函数
-
如果使两个相同函数名
function xitu(){
var x=1;
function xitu2(){
var x='A';
console.log('inner'+x);
}
console.log('outer'+x);
xitu2()
}
xitu()
- 假设JavaScript中函数查找变量从自身函数开始~,由内向外查找,假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量
提升变量的作用域
function xitu(){
var x="x"+y;
console.log(x);
var y='y';
}
结果:x undefined 说明:js执行引擎,自动提高了y的作用域但是不会被赋值
function xitu2(){
var y;
var x="x"+y;
console.log(x);
y='y';
}
- 这个是在JavaScript建立之初就存在的特性,养成习惯,所有的变量声明都放在最前面,便于代码维护。
var x,a,b...;
全局函数
x=1;
function f(){
console.log(x)
}
f()
console.log(x)
全局对象 window
var x='xxx';
alert(x);
alert(window.x);
- 默认所有的全局变量,都会自动绑定在window对象里
- alert()这个函数本身也是一个window变量
- JavaScript实际上只有一个全局作用域,如何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,就会报错refrenceError
规范
- 由于我们所有的全局变量都会绑定到我们的window上。如果不同的js文件,使用了相同的全局变量,冲突->如果减少冲突?
定义唯一的全局变量
var xitu={};
xitu.name="xitujuejing"
xitu.add=function(a,b){
return a+b;}
- 把自己的代码全部放在自己定义的唯一空间名字中,降低全局变量冲突的问题
- jQuery.==${}
局部作用域let
function aaa(){
for(var i =0;i<100;i++){
console.log(i)
}
console.log(i+1); //这个i还是可以使用
}
- let关键字,解决局部作用域冲突问题
- 建议大家使用let来定于局部变量
常量const
const PI='3.14';
console.log(PI);
PI='123'
- 会报错PI已经被常量定义无法被修改