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覆盖了
而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覆盖了
相关文章推荐
- js的函数作用域 以及声明提前
- js中变量的函数作用域和声明提前
- js 函数作用域之声明提前
- js函数作用域和声明提前
- Thin的DateChooser代码学习(关于js的函数参数为一个完整的函数以及“对象不支持此属性或方法”错误的解决)(原创,转载请声明)
- javascript的函数作用域及声明提前
- javascript中函数作用域和声明提前
- javascript的函数作用域及声明提前
- JS基础第九天:逆名函数以及作用域的介绍
- javascript 函数作用域和声明提前 十七
- JS的作用域和声明提前,js中局部变量泄露为全局变量
- 初探JavaScript——JS另类的作用域和声明提前。
- 一个题目引发的闭包、函数声明以及作用域的简单思考
- js变量声明提升,变量作用域与函数作用域,作用域链
- js中函数声明与函数表达式以及匿名函数的理解
- javascript基础(函数与方法的区别,变量作用域,变量和函数的声明提前,函数作用域)(十五)
- js 全局变量、局部变量的作用域;变量声明提前;无块级作用域
- JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”QQ253079952
- 函数作用域和声明提前
- 从零开始学_JavaScript_系列(20)——js系列<7>(函数原型的两种声明方式、函数的作用域)