分析一个JS面试题
来源:互联网 发布:可靠性软件招标 编辑:程序博客网 时间:2024/05/17 22:41
有点小意思, 分析一下, 一句一句往下看
1. function foo() {
...
}
定义一个foo 的函数对象(函数也是对象), 所以相当于这样
var foo = function() {...
2. foo.prototype.abc = function ... Alisoft
prototype在js中是很有意思的东西, ...(这里省去几千非常非常重要的文字)
总之,上面之后,我们可以这样用:
var a = new foo();
a.abc(); // alert Alisoft
3. foo.abc = function(... Yahoo
foo是一个对象, 所以abc是它的一个属性(成员? 或者其他,反正是东东),
就像
foo.a = 123; 一样, 只是上面 abc的类型是函数(对象)
4. var obj = new foo();
// 重点来啦, 这个会构造一个对象, 然后执行foo函数(我们还米有看), 现在来看
-----> 在开始的函数体内:
(1) foo.abc = function ... Alibaba,
在上面我们知道, foo.abc 是 function ...Yahoo,
现在被 覆盖 了
(2) this.abc = function ... Alimama
此时的 this就是 new 返回的那个 obj
如果米有这句话, obj.abc 就是 foo.prototype.abc
现在又被 覆盖 了, 所以 obj.abc 就是 Alimama
(3) abc = function ... Alipay
(4) var abc = function ..Taobao
如果米有第(4)句, 将会从外部查找abc, 这意味着形成一个closure,
如果foo是顶层的话,那么 相当于 window.abc = function Alipay
但是有了 var abc = function Taobao,
由于在js中, 变量是函数作用域的(这被称为静态作用域,而在Java C等语言中,有更细的作用域, PHP的作用域也是函数级的)
所以上述实际上是这样:
var abc = function ... Taobao
abc = function Alipay..
很清楚了吧?
5. obj.abc(); 是 Alimama 见 (2)
6. foo.abc(); 是Alibaba 见(1)
7. abc(); 函数未定义,会有js异常(因为 foo内的abc 不是closure变量, 见(4))
- 分析一个JS面试题
- 一道JS面试题及分析
- 一个Hibernate 的面试题, 现场分析问题
- 一个Hibernate 的面试题, 现场分析问题
- [C-programing]代码分析:索尼一个循环嵌套面试题
- 一个软件面试题(直接入手和分析后)
- js面试题
- js面试题
- JS面试题
- js面试题
- 收集js面试题
- JS 面试题大全
- js经典面试题
- js面试题
- 一道JS面试题
- Js面试题
- 一道JS 面试题
- js 面试题
- No CurrentSessionContext configured!" 异常解决方案
- OpenGL Vertex Array【转】
- 一种基于代理CGI技术的跨域永久性解决方案
- 用Debug函数实现API函数的跟踪(1)
- 数组归并排序
- 分析一个JS面试题
- 找出第K大数(前K大数)的类快排思想总结...
- Oracle数据库服务启动后又停止了错误
- 用Debug函数实现API函数的跟踪(2)
- poj3356
- Duff's device神奇的switch
- 2010长沙的夏天
- 《Windows核心编程》のWindows时间
- 线程数量控制