javascript创建INcode工作区(框架)

时间:2011-10-10 22:00:58

标签: javascript

如果我对公众有一点“框架”,我怎样才能建立自己的“工作空间”?所以我可以使用我想要的变量名称吗?

我该如何完成?

2 个答案:

答案 0 :(得分:0)

使用匿名函数包装器。使用var定义的任何变量都不可用于包装器之外的代码。无论何时想要定义方法或属性,都要将它们添加到tobepublic对象(最后返回)。

var your_namespace = (function(){
    //Your own "workspace"
    var tobepublic = {};
    //Define any attributes and methods which should be public on tobepublic
    tobepulic.helloWorld = function(){
        alert("Hi!");
    }

    return tobepublic;
})();

公开地说,上面的代码看起来像下面的代码。但是,上述方法也可以访问私有方法/变量,这些方法/变量无法从“外部”看到:

var your_namespace = {
    helloWorld: function(){
        alert("Hi!");
    }
}

答案 1 :(得分:0)

创建一个函数闭包局部范围。

范围?

此代码可能会为您解决一些问题。阅读评论。

<script type="text/javascript">

    // global scope
    function globalFunc(text) {
        alert(text);
    }

    var privateFunc = null;

    // function closure scope
    (function(){

        // closure function
        function closureFunc(text) {
            // can call global
            globalFunc(text);
        }

        // let's make closure function accessible from global scope
        // since privateFunc variable is in global scope
        privateFunc = closureFunc;
    })();

    // call closure function
    privateFunc("calling closure function");

    // ERROR: this will not work due to function being in closure scope
    closureFunc("calling closure function");

</script>

创建本地范围

奇怪的功能括号实际上做了什么?

这是一些功能:

function name(someParameter) { ... }

将它放在括号中并在末尾添加一些,立即执行:

(function name(someParameter) { ... })("Parameter text value");

注意功能参数......

为什么图书馆使用本地范围?

库通常使用本地范围来防止污染,更重要的是与其他可能的库冲突。想象两个库都定义了一个名为getName的函数。最后一个定义它将简单地覆盖第一个实现,从而使第一个库出现故障。

当每个库创建自己的闭包范围时,他们可以创建任何函数,变量并使用它们而不必担心被覆盖。库通常只是将一些小部分暴露在全局范围内,因此其他脚本实际上可以使用该库。

(function() {

    var closureVar = "I'm local";

    globalVar = "I'm global";
    // or
    window.globalVar2 = "I'm global equivalent";

})();

省略var或引用window对象会使函数或变量成为全局函数。