本文翻译youtube上的up主kudvenkat的javascript tutorial播放单
源地址在此:
https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b
本次视频中我们将通过例子来理解Javascript中的闭包(closure)
什么是闭包(closure)?
一个闭包就是一个在函数内部的一个函数,而且该函数能够使用其本身的变量和全局变量.内部函数不止能用其外部包裹的函数的变量,同时也可以使用外部函数的参数.一般来说就是通过在一个函数内部中添加一个新的函数来制造闭包的
Javascript闭包例子
function addNumbers(firstNumber, secondNumber) { var returnValue = "Result is : "; // This inner function has access to the outer function's variables & parameters function add() { return returnValue + (firstNumber + secondNumber); } return add(); } var result = addNumbers(10, 20); document.write(result);
Output : Result is : 30
以下的代码返回内部函数表达式
function addNumbers(firstNumber, secondNumber) { var returnValue = "Result is : "; function add() { return returnValue + (firstNumber + secondNumber); } // We removed the parentheses. This will return the inner function expression without executing it. //我们移出了add后面的小阔号,这样就会返回一个内部函数表达式了
return add; } // addFunc will contain add() function (inner function) expression. // addFunc将包含一个add()函数表达式
var addFunc = addNumbers(10, 20); // call the addFunc() function and store the return value in result variable
//呼出addFunc()函数,并且把返回的值存储在result这个变量里
var result = addFunc(); document.write(result);
返回并且运行内部函数
function addNumbers(firstNumber, secondNumber) { var returnValue = "Result is : "; function add() { return returnValue + (firstNumber + secondNumber); } // We removed the parentheses. This will return the inner function add() expression without executing it. //我们删除掉了add后面的小括号,这将返回内部函数add()表达式
return add; } // This returns add() function (inner function) definition and executes it. Notice the additonal parentheses. //这一段会返回add()函数的定义并且运行它,注意到(10,20)后面的小括号了吗
var result = addNumbers(10, 20)(); document.write(result);