本文和大家分享的主要是javascript
中变量作用域相关内容,一起来看看吧,希望对大家
学习javascript有所帮助。
1.
用
var
声明的变量是有作用域的
,
比如我们在函数中用
var
声明一个变量
1 'use strict';2 function num(){3 //
用
var
声明一个变量
num14 var num1 = 15;5 }
函数中声明了一个变量 num1 ,
在
js
函数中用
var
声明变量实际上就声明了一个局部变量。局部变量就是在
外部访问不到
只能在
函数内部访问
。
1 'use strict';2 function num(){3 //
用
var
声明一个变量
num14 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
来源:
博客园