首页 > 解决方案 > JS:在创建闭包时,如果我不存储为变量,内部函数如何访问外部函数参数?

问题描述

我不知道这些闭包 2 是如何完成同样的事情的。我了解下面的示例 1 将如何工作,因为变量foo存储了参数的值,但我无法理解的是,在示例 2 中删除变量并直接从内部 func 访问外部参数,它有什么参考那个?

//ex1:
function firstex1(x) {

	   let foo = x;
   	   console.log(foo)
     
	   function second() {
	   	return foo + 100
		
       }

	   return second
    }

console.log("Example 1:  "+ firstex1(1)());
//ex:2 


    function firstex2(x) {
	
   	   console.log(x)
     
	   function second() {
	   	return x + 100
		
       }

	   return second
    }
console.log("Example 2:  "+ firstex2(1)());

标签: javascriptclosures

解决方案


在示例 2 中,参数 x 被传递给外部函数。在外部函数内部,每个实体都可以访问 x,因为它的范围包含在该函数的完整代码块中。当一个内部函数试图访问那个 x 时,它可以很容易地做到这一点,因为它可以访问那个范围,因为它本身就存在于那个范围中。这就像您声明一个全局变量并尝试在函数内部访问它一样。该函数可以访问所有全局变量。

    var count=0;
    function a()
    {
    console.log(count++)
    }
    
    a();

以上将返回 count+1 ,因此将

 function first(x) {
    
       console.log(x)
    
       function second() {
        return x + 100
    
       }
    
       return second
    }
    
    console.log(first(1)());


推荐阅读