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
而不是
sayHello();
the global object
,我想知道为什么...     

解决方法

        除非您已将该代码包装在另一个函数中,然后创建了新的变量作用域,否则它应该可以正常工作。 示例: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
是对全局对象的引用。     ,        我的猜测是您正在运行
onDomReady
onLoad
。如果我是对的,那就是你的问题(或者似乎是在jsFiddle中玩耍时出现的问题)。不要将其包装起来,并将其加载到jQuery之后的头部或主体中。 参见http://jsfiddle.net/morrison/euprL/ 原因与范围界定有关。 JavaScript中变量的范围是什么?我认为总结得很好。     ,        
The global object
实际上不是要说的。暗示它将返回全局“ 12”对象,这是全局变量和此类变量所在的位置。除非您有一个名为“ 4”的全局变量,否则该值将为“ 1”。 编辑 我第一次错过了15英镑。
var
使其成为当前范围的一部分,因此正如其他人指出的那样,除非您位于全局范围内,否则它将找不到该变量。     ,        像这样测试您的代码,它可以工作:
<html>
<head>
<script type=\"text/javascript\">
var myName = \'the global object\',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>
您能否向我们提供有关此脚本上下文的一些详细信息?     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...