JavaScript声明过的变量提升往往会影响到我们对变量的正常获取,所以特写此文,以便以后使用 。
一 那么什么是变量提升呢
js中定义变量的两种:(注意在方法外不加var是不能定义变量的,出现 xxx is not defined)
- 都加var,在方法内则是局部变量,在方法外则是全局变量。
- 在方法内,加var为局部变量,不加var则是全局变量(在执行当前方法之后)
<script type="text/javascript">
//变量声明的提升
function text1(){
var a = "1";
var b = "3";
var c = function(){};
var d = "4";
}
//上述代码等价于
function text2() {
var a,b,c,d;
a = "1";
b = "2";
c = function(){};
d = "3";
}
</script>
变量提升案例
由于test1函数里面定义了变量a,由于
var a = 'I\'m a in all'
function test1 () {
console.info(a)
console.info(window.a)
var a = 'I\'m a in test1'
console.info(a)
}
test1()
上述代码相当于
var a = 'I\'m a in all'
function test1 () {
var a
console.info(a) // undefined
console.info(window.a) // I'm a in all(因为window指的是全局环境)
a = 'I\'m a in test1'
console.info(a) // I'm a in test1
}
test1()
案例2
var a = 'I\'m a in all'
function test2 () {
console.info(a) // I'm a in all
a = 'I\'m a in test2' // 这里原本就是赋值,所以上边的a会输出全局变量
console.info(a) // I'm a in test2
}
案例3
function test3 () {
console.info(a) // 报错(Uncaught ReferenceError: a is not defined)
a = 'I\'m a in test3' // 这里本来就是赋值,所以上边的a会输出全局变量
console.info(a) // I'm a in test3
}
test3()
console.info(a) // I'm a in test3(本来没有全局变量a,当test3运行时,定义了一个全局变量a,所以这里会输出)
最终页面展示:
扫描二维码关注公众号,回复:
3528665 查看本文章