JavaScript作用域 在JavaScript中,对象和函数同样也是变量 在JavaScript中,作用域可以访问变量,对象,函数的集合 变量-->局部变量和全局变量 作用域:就是变量的使用范围 局部作用域和全局作用域 js中没有块级作用域,对括号中定义的变量,这个变量可以在大括号外面使用 函数中定义的变量是局部变量 变量的作用域 块级作用域: 在其他语言中,任何一对或括号中的语句都是一个块,在这之中定义的所有变量在代码外都是不可见的 JavaScript中没有块级作用域 全局变量: 定义在script不属于某个函数的变量 局部变量: 定义在函数内部的变量 其他: 函数内部可以访问到该函数所属的外部作用域的变量(作用域链) 不使var 声明的变量是全局变量,不推荐使用 变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁 JavaScript局部作用域 变量在函数内声明,变量为局部作用域 局部变量:只能在函数内部访问 因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量 局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁 函数参数只在函数内起作用,是局部变量 JavaScript全局变量 变量在函数外定义,即为全局变量 全局变量有全局作用域:网页中所有的脚本和函数均可以访问 如果变量在函数内没有声明(没有使用var关键字)该变量为全局变量 JavaScript变量生命周期在他声明时初始化,局部变量在函数执行完毕后销毁。全局变量在网页关闭后销毁 HTML的全局变量 在HTML中,全局变量是window对象,所有数据变量都属于window对象 <script> //全局变量:在任何位置都可以访问 var name="a"; console.log(name); //a function f1(){ console.log(name); } f1(); //a //局部作用域:在函数内部声明一个变量,只能在函数内部访问 function f1(){ //局部变量 var name="aaa"; console.log(name); //aaa } f1(); console.log(name); //a var a=18; function f1(){ //先在当前作用域下找变量a,如果当前作用域没有变量a,会去上一级作用域找变量a,如果找到,就获取a的值 console.log(a); } f1(); //18 //作用域链:变量的使用,从里向外,层层的搜索,搜索到了就可以直接使用了 //层层搜索,搜索到0级作用域的时候,如果还没有找到这个变量,结果就是报错了 var num=10; //作用域链 级别 0 function f1(){ var num=20; //作用域链 级别 1 function f2(){ var num=30; //作用域链 级别 2 console.log(num); } f2(); //30 } f1(); //30 </script> 变量提升: 定义变量的时候,变量会被提升到作用域的最上边,变量的赋值不会提升 函数提升: JavaScript解析器首先会把当前作用域的函数声明提前到整个作用于的最前面 <script> //预解析:就是在浏览器解析代码之前,把变量和函数的声明提前(提升到作用于的最前面) //变量的提升 console.log(num); var num=100; //undefined //函数的声明被提前了 f1(); function f1(){ console.log("这个函数执行了"); //这个函数执行了 } //如果这样的话,函数就不能声明了 var f2; f2=function (){ console.log("好帅了"); }; //函数声明提前 var num=10; fun(); //undefined function fun(){ console.log(num); var num=20; } //解析器 //预解析 全局作用域 //先找var,function和参数 //找到var和function之后,会把var和function提前 //num //从上到下一行行执行代码 num=10; func(); //执行到fun后,进入局部作用域 //预解析 //num //从上到下一行行执行代码 //解析后的代码为: var num; function fun(){ var num; console.log(num); num=20; } num=10; fun(); //例题2 f1(); console.log(c); console.log(b); console.log(a); function f1(){ var a=b=c=9; console.log(a); console.log(b); console.log(c); } //解析后的代码为 function f1(){ var a; a=b=c=9; console.log(a); console.log(b); console.log(c); } f1(); console.log(c); console.log(b); console.log(a); </script>
2018-9-26-js作用域
最新推荐文章于 2022-01-23 17:15:03 发布