如何将参数传递给匿名Javascript函数?

如何将参数传递给匿名Javascript函数?,javascript,anonymous-function,lambda,Javascript,Anonymous Function,Lambda,我正在写一个简单的计数器,我想让这个计数器的安装对于用户来说非常简单。我见过的最简单的计数器代码之一(针对安装它的用户)是谷歌分析代码 因此,我想将主代码存储在一个文件中,安装我的计数器的用户只需按如下方式设置websiteID: <html><head><title></title></head><body> <script type="text/javascript" src="http://counterhost

我正在写一个简单的计数器,我想让这个计数器的安装对于用户来说非常简单。我见过的最简单的计数器代码之一(针对安装它的用户)是谷歌分析代码

因此,我想将主代码存储在一个文件中,安装我的计数器的用户只需按如下方式设置websiteID:

<html><head><title></title></head><body>
<script type="text/javascript" src="http://counterhost.lan/tm.js">
var websiteId = 'XXXXX';
</script>
</body></html>
我试图理解Google Analytics javascript代码,但没有做到这一点。有人能建议我如何在标签之间指定变量,然后在javascript文件中的匿名函数中读取它吗? 谢谢。

我不太清楚你在问什么,但是

您可以使用
id
属性标记任何HTML元素,然后使用
检索该特定元素

您还可以为任何HTML元素提供用户定义的属性,这些属性具有您自己选择的名称,然后在Javascript中为该元素获取并设置它们。

我不完全清楚您的要求,但是

您可以使用
id
属性标记任何HTML元素,然后使用
检索该特定元素


您还可以为任何HTML元素提供用户定义的属性,这些属性具有您自己选择的名称,然后在Javascript中为该元素获取并设置它们。

在您的示例中,
websiteId
是一个全局变量。因此,它在任何地方都可以访问,包括匿名函数,除非存在同名的局部变量

<script> var websiteId = "something"; </script>

在您的示例中,
websiteId
是一个全局变量。因此,它在任何地方都可以访问,包括匿名函数,除非存在同名的局部变量

<script> var websiteId = "something"; </script>

我认为您对如何调用JS对象有点困惑

z
是一个字符串,
“u gat”
。无法对其调用
aa()
,因为字符串没有名为
aa
的成员
aa
是存储在局部变量中的独立函数。即使调用了
aa()
,它也不会返回任何内容,因此在其结果上使用
new
操作符是毫无意义的<代码>新建只能在构造函数上调用

我猜你的意思是:

var _gat= function() {

    // Private variable
    //
    var data= null;

    // Object to put in window._gat
    //
    return {

        // Set the private variable 
        //
        init: function(d) {
            data= d;
        }
    };
}();

然后调用
\u gat.init('foo')
,就像在第二个示例中那样,将变量设置为website ID
'foo'
。这是因为
\u gat
对象是在匿名函数中定义的返回
{init:function(){…}
对象,在隐藏的
数据
变量上保留一个引用(“闭包”)。

我认为您对如何调用JS对象有点困惑

z
是一个字符串,
“u gat”
。无法对其调用
aa()
,因为字符串没有名为
aa
的成员
aa
是存储在局部变量中的独立函数。即使调用了
aa()
,它也不会返回任何内容,因此在其结果上使用
new
操作符是毫无意义的<代码>新建只能在构造函数上调用

我猜你的意思是:

var _gat= function() {

    // Private variable
    //
    var data= null;

    // Object to put in window._gat
    //
    return {

        // Set the private variable 
        //
        init: function(d) {
            data= d;
        }
    };
}();
然后调用
\u gat.init('foo')
,就像在第二个示例中那样,将变量设置为website ID
'foo'
。这是因为
\u gat
对象是在匿名函数中定义的返回
{init:function(){…}
对象,在隐藏的
数据
变量上保留一个引用(“闭包”)

有谁能建议我如何在标记之间指定变量,然后读取它[…]

如果您的标记同时具有SRC属性和JS内容,则不会

<script type="text/javascript" src="http:/x.com/x.js"></script>

。。不同于,

<script type="text/javascript">
    var x = 1;
</script>

var x=1;
Dojo是一个可选地将JS变量添加到脚本标记的框架。因此,如果您使用的是Dojo,您可以通过编写

<script type="text/javascript" src="mxclientsystem/dojo/dojo.js"
    djConfig="
    usePlainJson: true,
    parseOnLoad: true
">
</script>

Dojo通过运行脚本标记并计算定制的djConfig属性来实现这一点

然而,这并不能解决你的问题

您确实需要两个脚本标记。一句话,

<script type="text/javascript">
    var websiteId = '123456';
</script>

var-websiteId='123456';
将设置一个全局变量websiteId和第二个变量

<script type="text/javascript" src="http:/x.com/myreporter.js"></script>

它可以从任何地方加载并读取websiteId变量,我想,还可以报告它

有谁能建议我如何在标记之间指定变量,然后读取它[…]

如果您的标记同时具有SRC属性和JS内容,则不会

<script type="text/javascript" src="http:/x.com/x.js"></script>

。。不同于,

<script type="text/javascript">
    var x = 1;
</script>

var x=1;
Dojo是一个可选地将JS变量添加到脚本标记的框架。因此,如果您使用的是Dojo,您可以通过编写

<script type="text/javascript" src="mxclientsystem/dojo/dojo.js"
    djConfig="
    usePlainJson: true,
    parseOnLoad: true
">
</script>

Dojo通过运行脚本标记并计算定制的djConfig属性来实现这一点

然而,这并不能解决你的问题

您确实需要两个脚本标记。一句话,

<script type="text/javascript">
    var websiteId = '123456';
</script>

var-websiteId='123456';
将设置一个全局变量websiteId和第二个变量

<script type="text/javascript" src="http:/x.com/myreporter.js"></script>


它可以从任何地方加载并读取websiteId变量,我想,还可以报告它

您可以将变量传递给匿名函数,如下所示:

(function(arg1, arg2, arg3) {
    alert(arg1);
    alert(arg2);
    alert(arg3);
})("let's", "go", "redsox");

// will alert "let's", then "go", then "redsox" :)

您可以将变量传递给匿名函数,如下所示:

(function(arg1, arg2, arg3) {
    alert(arg1);
    alert(arg2);
    alert(arg3);
})("let's", "go", "redsox");

// will alert "let's", then "go", then "redsox" :)

如果指定
src
属性作为
script
元素的一部分,则
script
元素标记本身中的任何代码都不会执行。但是,您可以使用以下代码添加此功能。我从Crockford(我相信是他)那里得到了这项技术,他在演讲中使用了这项技术,讨论了渲染性能和异步加载脚本到页面中的无关主题

JavaScript:

(function() {
    // Using inner class example from bobince's answer
 var _gat = (function() {
     var data= null;

     return {
         init: function(d) {
          console.info("Configuration data: ", d);
             data = d;
         }
     }
 })();

 // Method 1: Extract configuration by ID (SEE FOOT NOTE)
 var config = document.getElementById("my-counter-apps-unique-and-long-to-avoid-collision-id").innerHTML;

 // Method 2: search all script tags for the script with the expected name
 var scripts = document.getElementsByTagName("script");

 for ( var i=0, l=scripts.length; i<l; ++i ) {
  if ( scripts[i].src = "some-script.js" ) {
   config = scripts[i].innerHTML;
   break;
  }
 }

 _gat.init( eval("(" +config+ ")") );
})();
(函数(){
//使用bobince答案中的内部类示例
var_gat=(函数(){
var数据=null;
返回{
init:函数(d){
控制台信息(“配置数据:”,d);
数据=d;