BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #35104同步于 2016/3/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

这道js笔试题为啥输出10?

ztinpn
2016/3/28镜像同步22 回复
如何理解??
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
cocoyimasa机器人#1 · 2016/3/28
因为this指针绑定的是window。window.length=10。
ztinpn机器人#2 · 2016/3/28
fn在obj内调用的为啥this没指向obj呢? 【 在 cocoyimasa (【意涵团】迷路的枫酱) 的大作中提到: 】 : 因为this指针绑定的是window。window.length=10。
e97ace机器人#3 · 2016/3/28
标准就是这么定义的. 在严格模式下,输出10的那次的fn的this实际是undefined,在非严格模式下才成为了global. 至于第二的arguments[0]()的输出,你就想一下,arguments[0]就是fn,相当于arguments['fn'](实际上只能用index来获得,这么写是方便你理解),这个this是arguments. 其实绑定this的,除了显式的bind,apply,call,就是通过object.foo或者object['foo']来绑定 ———— 微博 @flowmemo 现在主要写JavaScript. 关注广泛, 欢迎交流.
olo机器人#4 · 2016/3/28
10和2?
h452114240机器人#5 · 2016/3/28
赞个 【 在 e97ace 的大作中提到: 】 : 标准就是这么定义的. : : 在严格模式下,输出10的那次的fn的this实际是undefined,在非严格模式下才成为了global. : : 至于第二的arguments[0]()的输出,你就 : ......... 发自「贵邮」
sj159372009机器人#6 · 2016/3/29
【 在 ztinpn 的大作中提到: 】 如何理解??
stevesasuke机器人#7 · 2016/3/29
打个比方,转基因那么简单的话,人家学生物的就不用搞各种高新技术了... this 首先是在运行时根据函数的执行环境绑定的,指向就那么几种,点击这里《JavaScript 秘密花园》(这题是里面写的第一个常见误解╮(╯▽╰)╭): * 作为一个对象的方法调用的时候,this 指向那个对象,比如 obj.fn() * 作为一个普通函数(或者匿名函数)调用的时候,指向全局对象 window,比如 fn(),(这题属于这种情况,就算你把函数定义在里面也一样...) * 构造函数中 this 指向实例化的对象 * 还有使用 call 和 apply 动态改变 this 的指向 举几个《JavaScript 高级程序设计》上第七章的栗子... 1. 不符合预期的闭包 var name = "The Window"; var object = { name: "My Object", getNameFunc: function() { return function() { return this.name; }; } }; alert(object.getNameFunc()()); // The Window (非严格模式下), // 此处有两个括号,因为 object.getNameFunc() 是一个匿名函数, // 后一个括号是匿名函数调用。 为什么匿名函数没有取得其包含作用域(或外部作用域)的 this 对象呢? 前面曾经提到过,每个函数在被调用时都会自动取得两个特殊变量:this 和 arguments。而内部函数在搜索这两个变量时,只会搜索到其 AO 为止,所以永远不能直接访问到外部函数中的 this 和 arguments。 不过若是我们将外部作用域中的 this 对象保存在一个闭包能够访问到的变量里,就可以让闭包访问到该对象了: 2. 符合预期的闭包 var name = "The Window"; var object = { name: "My Object", getNameFunc: function() { var that = this; // 使用 that 保存外部函数的 this //(防止被内部函数的 this 屏蔽) return function() { return that.name; // 由于访问的是内部 AO 中没有的变量 that, // 所以在 SC 中外部的 AO 上搜索, // 得到外部函数的 this。 }; } }; alert(object.getNameFunc()()); // My Object 3. 奇怪的栗子╮(╯▽╰)╭ var name = "The Window"; var object = { name: "My Object", getName: function() { return this.name; } }; object.getName(); // My Object,很好理解 this 就是指向 object (object.getName)(); // My Object,虽然将函数包了起来, // 但还是通过 object.getName 调用,this 还是指向 object (object.getName = object.getName)(); // The Window(非严格模式下),看起来很奇怪, // 将函数 getName 赋值为 getName,再调用赋值后的结果 // 因为赋值表达式操作的是 getName 函数本身, // 所以 this 的值没有得到维持,调用时指向了 widnow。 【 在 ztinpn 的大作中提到: 】 : 如何理解??
anthozoan77机器人#8 · 2016/3/29
进楼学习
zq010机器人#9 · 2016/3/29
使用:fn.apply(this); 即可。 【 在 ztinpn 的大作中提到: 】 : fn在obj内调用的为啥this没指向obj呢?