您的位置:首页 > Web前端 > JavaScript

js的函数作用域 以及声明提前

2018-03-05 15:15 281 查看
例如c语言,花括号内的每一段代码都具有各自的作用域, 而且变量在声明他们的代码外是不可见的 ,我们称之为块级作用域。
而javascript中并没有块级作用域, js中使用函数作用域。
变量在声明他的函数体内以及任何子函数体内都是有意义的 。
js的函数作用域意味着函数内声明的所有变量在函数体内都是始终可见的, 有意思的是, 变量在声明之前甚至已经可以使用。
这个特性被称为声明提前(hoisting), 即js函数内的所有变量都被提前至函数体的顶部实例:var test = "js";
var init = function(){
alter(test);
var test = "java";
}

init();
上述代码会打印出什么,结果是undefined.

为什么是undefined, 不是js呢?

因为test被声明提前相当于以下代码
var test = "js";
var init = function(){
var test;
alter(test);
test = "java";
}

而局部变量的优先级又高于全局变量;所以把全局的test变量js覆盖了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: