【问题标题】:How is the javascript method referenced for the window object?窗口对象的javascript方法是如何引用的?
【发布时间】:2016-05-29 17:56:41
【问题描述】:

当我在 on document ready 监听器中声明一个基本函数时,它不能用于任何内联 javascript 代码,如下所示。但是,当我在内联函数上调用 window.alertMeTwo() 时,它可以工作。

如何引用尚未创建的Window函数?

这个链接过程是如何工作的?

    var alertMeOne = function { alert();  }
    //works inline

    window.alertMeOne = function {alert()};
    //works inline

    jQuery(document).ready(function() {

       var alertMeTwo = function(){alert();}
        // does not work inline

       window.alertMeTwo = function(){alert()};
       //works inline????

    });
<head>
<!-- ref to js file here -->  
</head>
<body onclick="javascript:alertMeTwo()">
</body>

【问题讨论】:

  • 你需要经历这个。 stackoverflow.com/questions/111102/…
  • "如何引用尚未创建的 Window 函数?" onclick 不会“验证”alertMeTwo() 在定义时是否存在.它在被调用后进行检查,查找alertMeTwo 并检索其当前值。不过,onevent 属性只能在全局范围内搜索。

标签: javascript html dom window javascript-objects


【解决方案1】:

alertMeOne()定义在全局范围内(与window下的范围一致)。

定义的第一个 alertMeTwo() 是传递给 jQuery().ready 的回调范围——不是全局范围。

第二个定义在本地范围内,但绑定到全局范围 (window.alertMeTwo)。

如果您使用内联语法访问函数,则必须指定范围,否则您将返回到全局范围。

此外,在这种特定情况下,由于您没有将 alertMeTwo 导出到可从全局访问的某个命名空间,因此您只能从该范围(在 .ready 回调中)调用它。

【讨论】:

    【解决方案2】:

    尝试在 jquery 中分配一个 .on() 事件处理程序

    window.alertMeTwo.on("load", function(){ 
    //code goes here 
    });
    

    【讨论】:

      【解决方案3】:

      如何引用尚未创建的Window函数?

      这个链接过程是如何工作的?

      JavaScript 函数,包括那些从 onevent 属性创建的函数,在定义时不直接链接到变量或验证它们的存在。

      它们引用一个作用域链或Lexical Environments,通向全局作用域,每个作用域都可以存储您在Environment Records 中定义的变量。

      当函数执行时,当它到达alertMeTwo() 时,它才会开始在环境及其记录中搜索alertMeTwoReferenceError 只有在运行环境链而没有找到变量时才会抛出。


      对于onevent 属性,这些函数仅在全局范围/环境和Global Environment Record 内搜索。在浏览器中,该对象是浏览器中的window 对象。

      【讨论】:

        猜你喜欢
        • 2016-08-04
        • 2010-09-19
        • 2012-09-05
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-13
        相关资源
        最近更新 更多