javascript痛点之一变量作用域
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
要养成在函数中顶部先声明变量的好习惯!
(完
全局变量待更
以上是关于javascript痛点之一变量作用域的主要内容,如果未能解决你的问题,请参考以下文章