在进行链接时如何使内部功能不超出主要功能范围?

时间:2012-09-17 18:26:26

标签: javascript scope chaining

示例:

function testFunc() {
  this.insideFunc = function(msg) {
    alert(msg);
  }
  return this;
}

testFunc().insideFunc("Hi!");
insideFunc("Hi again!");

为什么内部函数在全局范围内可见,如何防止?

3 个答案:

答案 0 :(得分:5)

那是因为thiswindow

要以这种方式使用this,您必须使用:

var _testFunc = new testFunc();

答案 1 :(得分:2)

根据ethagnawl的回答,如果调用者忘记了,你可以使用这个技巧强制你的函数new

function testFunc() {
    // if the caller forgot their new keyword, do it for them
    if (!(this instanceof testFunc)) {
        return new testFunc();
    }

    this.insideFunc = function(msg) {
        alert(msg);
    }
    return this;
}

http://jsfiddle.net/qd7cW/

答案 2 :(得分:2)

您可以尝试这样的事情:

var testFunc = function() {
    function insideFunc(message) {
        alert(message);
    }
    return {
        insideFunc: insideFunc
    }
}
testFunc().insideFunc("Hi!");
insideFunc("Hi again!");