Javascript IIFE - 后门?

时间:2016-11-10 16:20:34

标签: javascript anonymous-function iife

有没有人尝试或知道如何在匿名函数中访问变量?

实施例

var test = "Hi";

(function() {
    var test = "Bye";

    // Outputs "Bye"
    console.log(test);
})();

// Outputs "Hi"
console.log(test);

正如您可以看到上次日志返回"嗨"但我想得到"再见"任何人都知道如何获得价值"再见"在这个例子中??

2 个答案:

答案 0 :(得分:2)

运行一个函数会创建一个范围; “再见”在此范围内定义;并且该范围在函数外部永远不可见。

如果您有权访问IIFE,那么您可以对其进行修改,以便将此变量导出到外部范围。

如果此IIFE位于与您的代码相同的交叉原点的命名函数内,则可以显示外部函数:

var toto = function() {
    var test = "Hi";

    (function() {
        var test = "Bye";

        // Outputs "Bye"
        console.log(test);
    })();

    // Outputs "Hi"
    console.log(test);    
}

console.log(toto);

在这些案件之外,什么也做不了;按设计。即使对功能代码显示的跨源限制也会阻止您访问不属于您的代码。聪明的人已经想到了这一点;我怀疑后门存在。

答案 1 :(得分:0)

唯一的方法是不在匿名函数范围内重新创建变量。



var test = "Hi";

(function() {
  test = "Bye"; // notice no "var", meaning it uses the existing variable

  // Outputs "Bye"
  console.log(test);
})();

// Outputs "Bye"
console.log(test);