1

我从http://cektkp.com/twittermarquee/twitmarquee.js获得了使用 twitter 样式代码的代码:

<script type=\"text/javascript\">

   //<![CDATA[
        var page={};
        $(function() {new FrontPage().init()});
   //]]>  
</script>

我知道有一个匿名的 javascript 函数可以创建 FrontPage 类的实例并初始化它。并且var page={};是一个对象文字,但是在这里将它定义为脚本标记的第一行是否正确?我在 JS 教程中找到了这个,You should not use an object literal at the beginning of a statement. This will lead to an error or not behave as you expect, because the { will be interpreted as the beginning of a block.

此外,在我的 javascript 文件中,我有以下代码:

Drupal.behaviors.stocksTicker = {
        attach: function( context, settings ) {
            page.trendDescriptions = {};
            loadTrendDescriptions();
        }
}
.
.
.
var processSummizeInternal = function (B) {
    var J = page.trendDescriptions[page.query];
.
.
.
function loadTrendDescriptions() {
    $("#trends a").each(function () {
        var A = $(this);
        var C = A.parent().find("em");
        if (C.length) {
            var B = A.text();
            var D = C.text().replace(new RegExp(B.replace(/([^\w])/gi, "\\$1"), "gi"), "<strong>" + B + "</strong>");
            var E = A.attr("title").length ? A.attr("title") : A.attr("name");page.trendDescriptions[E] = [B, D]
        }
    })
}

我无法理解 js 是如何访问这个变量的page.page在任何其他文件中没有其他任何其他地方的引用。

4

1 回答 1

1

在这里将其定义为脚本标签的第一行是否正确?

您不应该在语句的开头使用对象字面量。这将导致错误或行为不符合您的预期,因为{将被解释为块的开头。

此报价确实针对诸如

{init: function(){/* do something*/}}.init();

该语句实际上以对象文字开头。很奇怪?是的,无论如何你永远不会使用这样的代码。在你的情况下,

var page = {};

对象字面量在赋值语句内。这里没有问题,完全没问题。


我无法理解 js 是如何访问这个变量的page.

然后它会自动引用一个全局变量。实际上,您甚至在第一个片段定义了这样一个,并将其初始化为一个空对象。你包含的外部 js 然后trendDescriptions在其上定义了一个属性并愉快地访问了几次。

于 2013-07-16T22:36:06.630 回答