JS:如何防止访问全局变量do?

5

我希望在函数中禁用全局变量。

我想要像Adobe After Effect一样进行扩展。

示例代码:

function privateFunction(){
    return window;
}

通常情况下:

result : Window Object

但我希望能够达成以下目标:
result : undefined

我应该怎么做?

请帮助我。

我想在函数中阻止全局变量访问;


很抱歉,您的问题不是很清楚。您可以再详细解释一下吗? - T.J. Crowder
这可能会对你有所帮助:https://dev59.com/HWfWa4cB1Zd3GeqPja0E - V31
我想在函数中阻止全局变量的访问。 - Jeong SangCheol
可能是抄袭自以下链接:http://stackoverflow.com/questions/23177039/nodejs-variable-scope-preventing-accessing-global-variables.. - CODeeerrrrrrrr
2个回答

4

通过本地变量遮蔽全局变量:

function privateFunction() {
    var window;
    return window; // not the Window, but undefined now
}

我的意思是,JS 中许多重要的事情都建立在异步处理模型上,例如 DOM 事件或与其他环境的通信。然而,许多模式已经针对此进行了演化,因此如果运行不受信任的脚本也是异步的,这不应该是一个大问题。 - Bergi
这段代码无效——裸变量访问仍然会访问window变量:function p() { var window = null; fnord = 7; }仍会将7分配给全局的window.fnord - David Given
实际上,OP 是在询问如何阻止 所有 全局变量,并以 window 作为示例。(如果有人知道如何做到这一点,我想知道...) - David Given
@DavidGiven:在JS中,作用域是私有和非动态的(不能被干扰),你无法这样做(JS不是Lua)。您将需要在所需上下文中创建该功能。在Node中,您可以使用vm模块以自定义全局运行代码(尽管它不是具有单独进程的VM)。 - Bergi
@DavidGiven:JS语言没有针对此的API——它只设计用于单一环境运行。node vm.runInThisContext确实使用了一些较低级别的实现特定API。也许ES7将包括创建新领域的方法。 - Bergi
显示剩余13条评论

4

你需要将所有内容封装在一个闭包中:

    (function() {
        var window = 'foo';
        function privateFunction(){
            return window;
        }
    
        console.log(privateFunction());
    })();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接