Javascript 函数声明 的优先级 高于 变量声明的优先级,但 不会 覆盖变量赋值
2015-10-19 11:21
525 查看
一段代码及输出如下:
将上述代码稍作修改:
再次将上述代码稍作修改:
不知所以然,如何才能正确解释上述三段代码中的变了C?
众所周知,JS的变量和函数声明都会被存储到执行上下文的变量对象(或活动对象)中,即声明提前。
函数声明 的优先级 高于 变量声明的优先级,但 不会 覆盖变量赋值。
对于
记住一点: 命名函数表达式的标示符(即函数名称)在外部作用域是无效的
b = c; b(); console.log(a); //1 console.log(b); //2 console.log(c); //3 function c() { a = 1, b = 2, c = 3; };
将上述代码稍作修改:
b = function c() { a = 1, b = 2, c = 3; }; b(); console.log(a); //1 console.log(b); //2 console.log(c); //Uncaught ReferenceError: c is not defined
再次将上述代码稍作修改:
b = function c() { a = 1, b = 2, c = 3; console.log(a); //1 console.log(b); //2 console.log(c); //fuction c(){... }; b();
不知所以然,如何才能正确解释上述三段代码中的变了C?
众所周知,JS的变量和函数声明都会被存储到执行上下文的变量对象(或活动对象)中,即声明提前。
函数声明 的优先级 高于 变量声明的优先级,但 不会 覆盖变量赋值。
对于
var bar = function foo(){};语句,其实就是一个有效的命名函数表达式,但有一点需要记住:这个名字只在新定义的函数作用域内有效,因为规范规定了标示符不能在外围的作用域内有效:
var f = function foo(){ return typeof foo; // foo是在内部作用域内有效 }; // foo在外部用于是不可见的 typeof foo; // "undefined" f(); // "function"
记住一点: 命名函数表达式的标示符(即函数名称)在外部作用域是无效的
var bar = function foo(){}; // 命名函数表达式,因为它是赋值表达式的一部分
相关文章推荐
- JavaScript书籍阅读
- html5+javascript+css3实现下拉列表以及折叠功能
- 接口JSon字符串格式
- JS+CSS实现分类动态选择及移动功能效果代码
- jstl 遍历map
- iframe 自适应高度js
- 【转向Javascript系列】从setTimeout说事件循环模型
- js MD5加密 和 base64编码实现!
- js原生封装getClassName()方法-ie不支持getElementsByClassName,所以要自己实现获取类名为className的所有元素
- 图片自动切换鼠标移上暂停6秒继续切换的js代码
- JS实现的简洁纵向滑动菜单(滑动门)效果
- POST上传JSON数据
- 什么是Javascript Hoisting?
- hammer.js触摸,手指缩放等许多手势操作
- JS代码的加载
- JS实现的左侧竖向滑动菜单效果代码
- jsp文件中的一些写法
- Jackson如何实现json字符串和泛型List集合之间的转换
- js 进度条,可实现结束和重新开始
- jsp实验二