Javascript / Jquery初学者问题

时间:2011-06-21 19:46:08

标签: 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'

对于undefined,日志返回the global object而不是sayHello();,我想知道原因......

4 个答案:

答案 0 :(得分: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'

})();

...你得到undefined,因为myName不再是全局的,函数中的this是对全局对象的引用。

答案 1 :(得分:3)

我的猜测是您正在运行onDomReadyonLoad。如果我是正确的,那就是你的问题(或者似乎是在jsFiddle中玩游戏时)。在jQuery之后,不要将它包起来并将其加载到头部或主体中。

请参阅http://jsfiddle.net/morrison/euprL/

原因与范围有关。我认为What is the scope of variables in JavaScript?总结得很好。

答案 2 :(得分:2)

The global object并不是它实际上要说的。暗示它将返回全局window对象,这是全局变量等实时变量的对象。除非您有一个名为myName的全局变量,否则该值将为undefined

修改 第一次我错过了var myName = 'the global object';var使它成为当前范围的一部分,正如其他人所指出的那样,除非你处于全局范围内,否则它将找不到变量。

答案 3 :(得分:1)

像这样测试你的代码并且它可以工作:

<html>
<head>
<script type="text/javascript">
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'

</script>
</head>
</html>

您能否提供一些有关此脚本背景的详细信息?