首页 > 代码库 > javascript痛点之一变量作用域
javascript痛点之一变量作用域
1.用var声明的变量是有作用域的,比如我们在函数中用var声明一个变量
1 ‘use strict‘; 2 function num(){ 3 //用var声明一个变量num1 4 var num1 = 15; 5 }
函数中声明了一个变量num1,在js函数中用var声明变量实际上就声明了一个局部变量。局部变量就是在外部访问不到只能在函数内部访问。
1 ‘use strict‘; 2 function num(){ 3 //用var声明一个变量num1 4 var num1 = 15; 5 } 6 alert(num1);//num1 is not defined
2.在函数外定义变量的情况
var num1 = 15;//var声明变量 alert(num1);//15 function add(){ alert(num1+5); } add();//20
不在函数中定义的变量是全局变量,全局变量就是在任何地方都可以访问到
3.不使用var的情况
js允许变量不用声明就可以使用,不用var自动就是全局变量
num1 = 15; alert(num1);//15
*但你最好不要这样做,如果引入多个js文件里面都有一个不用var声明的全局变量会污染全局,bug也不容易排查。使用严格模式‘use strict’则可避免这种情况
‘use strict’; num1 = 15;//ReferenceError: num1 is not defined 会报错
4.两个函数内的变量互不影响
function num1(){ var age = 15; alert(age); } num1()//15 function num2(){ var age = 16; alert(age); } num2();//16;
函数内嵌套:内部函数可以访问外部函数的变量,而外部函数访问不了内部函数
function num(){ var age =15; function num1(){ var s = age+10; alert(s);//25 } alert(s+2);//会报错 }
如果是函数内的变量是重名的情况
function num(){ var age = 15; function num1(){ var age =20; alert(age);//20 } alert(age);//15 num1(); } num();
说明函数是从内而外查找的,当内部函数发现与外部函数重名就会自动屏蔽掉外部函数。
5.变量提升
变量可以先使用后声明
function num(){ y = 5; alert(30+y); var y; } num();//35
对于上述函数num()javascript引擎看到的是
function num(){ var y; y =5; alert(30+y); }
只能对变量提升,变量初始化不可以提升
function num(){ var y=5; alert(y+x); var x = 30; } num();//NaN
要养成在函数中顶部先声明变量的好习惯!
在上面也说过了全局变量的概念
不在任何函数内定义的变量就是全局变量
js默认有一个全局对象window,全局作用域下的变量都是绑定到window的一个属性。
var num = 15; alert(num);//15 alert(window.num)//15
(完
下一章 javascript痛点之二作用域链
待续
javascript痛点之一变量作用域
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。