诡异代码-js-2
来源:互联网 发布:网络维护明细 编辑:程序博客网 时间:2024/06/06 06:48
var a 为变量声明
function a(){} 为函数声明
js中变量和函数的声明(这里只是说var方式,而不是let的方式)会中所处的作用域中“提升“到代码段的最前面,细节:函数声明会先与变量声明提升,如果出现同名的,后者是变量声明将被忽略,如果是函数声明将被覆盖,如下示例:
1.
{ console.log(a) // 不会报错, 会输出undefine var a = 1}
等同如下:
{ var a console.log(a) a = 1}
- 2.
{ a(); // 不会报错, 会正常执行, 函数a的声明被提升到了前面 function a(){}}
3.
{ a() // 将输出 '1' var a // 虽然会被提升,但是有同名的 a 函数出现,这行代码将被忽略 function a(){ console.log('1') } // 会被提升 a = function(){console.log('2')} // 不会被提升}
4.
{ a() // 将输出 '2' function a(){ console.log('1') } // 会被提升 function a(){ console.log('2') } // 同样会被提升, 而且会覆盖 之前a的函数声明}
更诡异的:
foo()var a = trueif (a){ function foo(){console.log('1')}}else{ function foo(){console.log('2')}}
《You Don’t know JS》Page 41 的结果是 打印出 ‘2‘
但我在 nodejs v7.8.0 中的结果是 报错 而且是 TypeError (表示 foo 不是一个函数, 而不是报 ReferenceError(没有声明))
另外 我尝试 将 foo() 的函数调用放到最后,打印的结果是 ‘1’
正如书中所说,该行为并不可靠,中JavaScript未来的版本中有可能会改变(^_^果然是改变了)
0 0
- 诡异代码-js-2
- 诡异代码-JS-1
- 诡异的代码,郁闷~~~
- Python 的诡异代码
- 诡异的java代码
- JAVA诡异的代码
- 好玩,诡异,代码大全
- java 诡异的代码
- 诡异的JS数组长度
- 代码移植中的诡异bug
- 一段很诡异的代码
- 诡异
- 诡异
- 诡异
- "Uncaught object angular.js:36"诡异错误
- 谈谈js诡异的面向对象设计
- Js中诡异的Array.length
- js的事件方法感觉比较诡异
- Servlet过滤器
- centOS 6.5 mysql5.6忘记密码后重置密码
- 名企笔试:百度2015春季实习生(01排序) 2017-04-06 算法爱好者
- 链表面试题--从尾到头打印单链表
- 设计模式之单例模式
- 诡异代码-js-2
- POJ_2388_Who's in the Middle && 【快排,堆排实现】
- CodeForces 536A---Tavas and Karafs
- Palindrome Linked List
- select into语句之踩坑(一)报错
- css布局模型
- 5.4 判断两个字符串是否互为旋转词(find函数)
- Redis中Hash类型的常用操作
- 创建自增id