Javascript函数变量范围
执行以下操作有什么区别:Javascript函数变量范围,javascript,variables,scope,Javascript,Variables,Scope,执行以下操作有什么区别: function (callback) { var callback = callback || false; combineCallback = function () { callback.apply(window); .... } getJSON(combineCallback); } 或者用这个: function (callback) { var combineCallback = f
function (callback) {
var callback = callback || false;
combineCallback = function () {
callback.apply(window);
....
}
getJSON(combineCallback);
}
或者用这个:
function (callback) {
var combineCallback = function () {
callback.apply(window);
....
}
getJSON(combineCallback);
}
写writevar callback=callback | | false有什么区别吗代码>?var
不会在同一范围内“隐藏”局部变量。同样,var
也不会“隐藏”参数(这是一个局部变量/绑定本身)。简单地说,每次调用函数时,callback
表示一个不同的局部变量,它最初包含传递的第一个参数;而且只有一个局部变量叫做callback
因为var不会“创建”新变量(搜索“提升”)
及
是相等的-没有区别。(尽管我觉得后者更清楚。)
但是,删除callback=callback | | false
会更改语义。特别是,回调可能会以假y值结束,比如没有该行的0。这里是否需要/有用是另一个问题,因为(false)。应用(…)
仍将导致错误
下面是一个用于x | | y
的简单TTL:
x y x || y
------- --- ------
TRUTH-y ANY x
FALSE-y ANY y
var
不会在同一范围内“隐藏”局部变量。同样,var
也不会“隐藏”参数(这是一个局部变量/绑定本身)。简单地说,每次调用函数时,callback
表示一个不同的局部变量,它最初包含传递的第一个参数;而且只有一个局部变量叫做callback
因为var不会“创建”新变量(搜索“提升”)
及
是相等的-没有区别。(尽管我觉得后者更清楚。)
但是,删除callback=callback | | false
会更改语义。特别是,回调可能会以假y值结束,比如没有该行的0。这里是否需要/有用是另一个问题,因为(false)。应用(…)
仍将导致错误
下面是一个用于x | | y
的简单TTL:
x y x || y
------- --- ------
TRUTH-y ANY x
FALSE-y ANY y
如果函数被多次调用。。如果我不定义var,它是否会被上一次回调忽略?false.apply()
和undefined.apply()
抛出一个类似的错误,因此在这方面没有区别。如果函数被多次调用。。如果我不定义var,它会不会对上一次回调过于敏感?false.apply()
和undefined.apply()
抛出一个类似的错误,所以在这方面没有区别。我认为OP的问题是,是否包括var callback=callback | | false代码中的code>是否会起作用。在我发布评论之前的几毫秒内,您编辑了答案。对不起!f函数被多次调用。。如果我不定义var,上一次回调是否会被忽略@Juhana我以前和var有过头部问题,这就是我问的原因。。这是@Basit之前的错误链接问题中的代码问题是它没有使用var
。如果参数“泄漏”范围或“升级”到全局变量,那将是可怕的!这将导致许多无法避免的错误!无论如何,本例中的var
与代码的运行方式完全无关代码中的code>是否会起作用。在我发布评论之前的几毫秒内,您编辑了答案。对不起!f函数被多次调用。。如果我不定义var,上一次回调是否会被忽略@Juhana我以前和var有过头部问题,这就是我问的原因。。这是@Basit之前的错误链接问题中的代码问题是它没有使用var
。如果参数“泄漏”范围或“升级”到全局变量,那将是可怕的!这将导致许多无法避免的错误!无论如何,本例中的var
与代码的运行方式完全无关。
x y x || y
------- --- ------
TRUTH-y ANY x
FALSE-y ANY y