我正在学习一些jQuery基础知识这本好书:http://jqfundamentals.com/book/
有一个例子没有返回正确的结果.
这是代码:
var myName = 'the global object',
sayHello = function () {
console.log('Hi! My name is ' + this.myName);
},
myObject = {
myName : 'Rebecca'
};
var myObjectHello = sayHello.bind(myObject);
sayHello(); // logs 'Hi! My name is the global object'
myObjectHello(); // logs 'Hi! My name is Rebecca'
Run Code Online (Sandbox Code Playgroud)
日志返回undefined而不是the global objectfor sayHello();,我想知道为什么......
它应该正常工作,除非你将该代码包装在另一个函数中,创建一个新的变量范围.
示例: http ://jsfiddle.net/RKYNn/
因此,myName不能作为全局对象的属性.
所以,如果你这样做:
(function() {
var myName = 'the global object',
sayHello = function () {
console.log('Hi! My name is ' + this.myName);
},
myObject = {
myName : 'Rebecca'
};
var myObjectHello = sayHello.bind(myObject);
sayHello(); // logs 'Hi! My name is the global object'
myObjectHello(); // logs 'Hi! My name is Rebecca'
})();
Run Code Online (Sandbox Code Playgroud)
...你得到undefined因为myName不再是全局的,并且this在函数中是对全局对象的引用.