我写了这段代码来自学JavaScript关闭:
function1 = function(){
var variable = "foo"
var function2 = function(argument){
console.log(variable + argument);
}
return function2
}
function3 = function1();
function3("bar");
Run Code Online (Sandbox Code Playgroud)
按预期打印"foobar".但变量在哪里生活?
它是否成为function3的属性,还是存储在function3中的其他位置?JavaScript是否遍历某种闭包链,类似于它如何遍历原型链?它存储在其他地方的内存中吗?
我想更深入地了解这一点.
我有以下代码,我不明白为什么我重新声明get方法时无法访问私有属性.
(function(w,d,a,undefined){
var cfg = {
currency: 'GBP',
exponent: 2
};
var get = function () {
return cfg;
};
a.init = function (settings) {
for (var k in settings) {
cfg[k] = settings[k];
}
};
a.set = function (args) {
get = args.get || get;
//eval(args) //works but why??
};
a.get = function () {
return get();
};
})(window,document,window.fxc = {});
fxc.init({currency: 'EUR'});
// prints, Object { currency="EUR", exponent=2}
console.log(fxc.get());
fxc.set({get: function(msg){
// cannot access private properties
return cfg; …Run Code Online (Sandbox Code Playgroud) 嘿,我在youtube上看到了这个视频http://www.youtube.com/watch?v=KRm-h6vcpxs
这基本上解释了IIFE和闭包.但我不明白的是我是否需要返回一个函数才能将其称为闭包.
防爆
function a() {
var i = 10;
function b() {
alert(i);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以将其称为闭包,因为它从外部函数的作用域访问'i'变量或者我是否需要返回这样的函数
return function b(){alert(i);}
Run Code Online (Sandbox Code Playgroud)