Javascript/Jquery初学者问题

use*_*915 2 javascript jquery

我正在学习一些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();,我想知道为什么......

use*_*716 5

它应该正常工作,除非你将该代码包装在另一个函数中,创建一个新的变量范围.

示例: 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在函数中是对全局对象的引用.

  • 同意,这个答案是对的.我怀疑OP的代码包含在`$(document).ready()`中 (3认同)
  • @patrick dw:我的猜测是dave,我们都同时被击落:P (2认同)