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)
网络异常,图片无法展示
|
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已经被常量定义无法被修改