Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome devtools控制台不显示关闭_Javascript_Closures - Fatal编程技术网

Javascript Chrome devtools控制台不显示关闭

Javascript Chrome devtools控制台不显示关闭,javascript,closures,Javascript,Closures,我尝试了一个非常基本的Javascript闭包示例,但我无法在Chrome开发工具中可视化它。请看截图 我已经创建了一个全局变量 var p = 3; 和一个函数 function f1() { var q = 2; return p+q; } 这个函数在里面使用全局变量p,所以这是一个闭包,对吗?如果我的理解不正确,请指导我 那么,如果这是一个闭包,为什么不在函数范围中显示为“闭包” “闭包是一个可以访问父作用域的函数,即使在父函数关闭之后也是如此。”在您的示例中,p是在

我尝试了一个非常基本的Javascript闭包示例,但我无法在Chrome开发工具中可视化它。请看截图

我已经创建了一个全局变量

var p = 3;
和一个函数

function f1() {
    var q = 2; 
    return p+q;
}
这个函数在里面使用全局变量
p
,所以这是一个闭包,对吗?如果我的理解不正确,请指导我

那么,如果这是一个闭包,为什么不在函数范围中显示为“闭包”

“闭包是一个可以访问父作用域的函数,即使在父函数关闭之后也是如此。”在您的示例中,p是在全局作用域中定义的,而不是在父函数中定义的。如果将代码包装在父函数中,在开发工具中,您将看到闭包下列出的p

var f2  = function(){

    var p = 3;

    var f1 = function(){
        var q = 2;
        return p + q;
    }

    return f1;

}();

console.dir(f2);

从技术上讲,引用全局变量并不构成闭包。闭包是指函数在封闭函数作用域中关闭变量。(您可能会发现有人声称对全局变量的闭包构成闭包,但事实并非如此——您看到的Chrome devtools显示反映了这一点。)有关此主题的更多信息,请参阅。@torazaburo。。。在David Flanagan的《JavaScript-权威指南》一书中提到,“从技术上讲,所有JavaScript函数都是闭包:它们都是对象,并且有一个与之相关联的作用域链。”。。。在这种情况下,它也有关联的作用域链,对吗?如果您愿意这样看,devtools显示的是闭包;在这种情况下,它恰好称之为“全局”,因为它是全局范围。然而,正如我上面提到的问题所讨论的那样,将这个特殊的案例称为结案是无益的,也是令人困惑的。书中所说的狭义上并没有错,但关键词是“技术上”。将这种情况称为闭包与这个词的常用方式不一致,也与引擎实际实现它的方式不一致。@torazaburo…+1我看到了讨论链接,它很有用。。。是的,我同意将这一特殊情况称为结案没有多大意义……另请参见