We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
let 允许把变量的作用域限制在块级域中。与 var 不同处是:var 申明变量要么是全局的,要么是函数级的,而无法是块级的。
var a = 5; var b = 10; if (a === 5) { let a = 4; var b = 1; console.log(a); // 4 console.log(b); // 1 } console.log(a); // 5 console.log(b); // 1
在用到内部函数的时候,let 可能有助于让代码更简洁
let callbacks = [] for (let i = 0; i <= 2; i++) { callbacks[i] = function () { return i * 2 } } // callback[0]() == 0 // callback[1]() == 2 // callback[2]() == 4
i 变成块级域(也就是花括号中的块,每进入一次花括号就生成了一个块级域),所以3个内部函数指向了不同的 i 如果上面这段时var 时
var callbacks = [] for (var j = 0; j <= 2; i++) { callbacks[j] = function () { return j * 2 } } // callback[0]() == 6 // callback[1]() == 6 // callback[2]() == 6
因为 j 是函数级变量,3个内部函数都指向了同一个 j ,而 j 最后一次赋值是3。 当 callbacks 被调用的时候,匿名函数保持对外部变量 j 的引用,此时 for循环已经结束, j 的值被修改成了 3.
如果需要改写
var callbacks = [] for (var j = 0; j <= 2; i++) { (function(i){ callbacks[i] = function () { return i * 2 } })(j) } // callback[0]() == 0 // callback[1]() == 2 // callback[2]() == 4
外部的匿名函数会立即执行,并把 j 作为它的参数,此时函数内 i 变量就拥有了 j 的一个拷贝
The text was updated successfully, but these errors were encountered:
No branches or pull requests
let
let 允许把变量的作用域限制在块级域中。与 var 不同处是:var 申明变量要么是全局的,要么是函数级的,而无法是块级的。
在用到内部函数的时候,let 可能有助于让代码更简洁
i 变成块级域(也就是花括号中的块,每进入一次花括号就生成了一个块级域),所以3个内部函数指向了不同的 i
如果上面这段时var 时
因为 j 是函数级变量,3个内部函数都指向了同一个 j ,而 j 最后一次赋值是3。
当 callbacks 被调用的时候,匿名函数保持对外部变量 j 的引用,此时 for循环已经结束, j 的值被修改成了 3.
如果需要改写
外部的匿名函数会立即执行,并把 j 作为它的参数,此时函数内 i 变量就拥有了 j 的一个拷贝
The text was updated successfully, but these errors were encountered: