javascript中圆括号()的位置-不寻常的语法?
我遇到了以下代码: 现在我对javascript还相当陌生,我对语法有一些疑问。首先,MDN定义了requestAnimationFrame方法,但在本例中,他们调用它时末尾没有()符号,其次,在最后一个分号之前似乎有一个额外的()符号。我并不真正理解这两种情况下的推理,因此一些启示将非常有用javascript中圆括号()的位置-不寻常的语法?,javascript,syntax,Javascript,Syntax,我遇到了以下代码: 现在我对javascript还相当陌生,我对语法有一些疑问。首先,MDN定义了requestAnimationFrame方法,但在本例中,他们调用它时末尾没有()符号,其次,在最后一个分号之前似乎有一个额外的()符号。我并不真正理解这两种情况下的推理,因此一些启示将非常有用 提前感谢。这就是所谓的立即调用函数表达式(缩写为IIFE)。你可以读到更多关于他们的信息 简而言之,它是一个立即执行的函数定义,并且立即执行的返回值被分配给window.requestAnimFrame。
提前感谢。这就是所谓的立即调用函数表达式(缩写为IIFE)。你可以读到更多关于他们的信息 简而言之,它是一个立即执行的函数定义,并且立即执行的返回值被分配给
window.requestAnimFrame
。这只是设置将在窗口中的函数。requestAnimFrame
。这里的window.requestAnimFrame
之后没有paren,因为此代码没有执行特定的函数。它正在执行一些其他函数(因此在末尾有paren),并将该函数的结果分配给window.requestAnimFrame
,以便将来调用该函数时,它将调用相应的函数
生命可以解释如下
作为函数定义,您知道以下语法:
function() {
}
然后将其包装在一组附加参数中,以便JS解释器将其视为一个表达式进行计算,如下所示:
(function() {
})
然后,为了执行该函数表达式,在末尾添加了()
,以实现以下功能:
(function() {
})();
然后,在执行的函数的代码中有一个return
语句,该语句导致立即执行的函数的结果被返回,并且返回值被分配给window.requestAnimFrame
。简而言之,这是:
window.requestAnimFrame = (function() {
return x;
})();
其中,x
原来是一个函数本身,是其他一些计算的结果。在本例中使用IIFE的主要优点是预先评估一些只运行一次的代码,因此window.requestAnimFrame
无论何时调用都会运行得更快
IIFE最常见的用途是创建一个函数作用域,将变量与父或全局作用域隔离开来,而无需创建命名函数。这就是所谓的立即调用函数表达式(简称IIFE)。你可以读到更多关于他们的信息 简而言之,它是一个立即执行的函数定义,并且立即执行的返回值被分配给
window.requestAnimFrame
。这只是设置将在窗口中的函数。requestAnimFrame
。这里的window.requestAnimFrame
之后没有paren,因为此代码没有执行特定的函数。它正在执行一些其他函数(因此在末尾有paren),并将该函数的结果分配给window.requestAnimFrame
,以便将来调用该函数时,它将调用相应的函数
生命可以解释如下
作为函数定义,您知道以下语法:
function() {
}
然后将其包装在一组附加参数中,以便JS解释器将其视为一个表达式进行计算,如下所示:
(function() {
})
然后,为了执行该函数表达式,在末尾添加了()
,以实现以下功能:
(function() {
})();
然后,在执行的函数的代码中有一个return
语句,该语句导致立即执行的函数的结果被返回,并且返回值被分配给window.requestAnimFrame
。简而言之,这是:
window.requestAnimFrame = (function() {
return x;
})();
其中,x
原来是一个函数本身,是其他一些计算的结果。在本例中使用IIFE的主要优点是预先评估一些只运行一次的代码,因此window.requestAnimFrame
无论何时调用都会运行得更快
IIFE最常见的用途是创建一个函数作用域,将变量与父或全局作用域隔离,而无需创建命名函数
(函数(回调){
并结束})的匿名函数
。这被称为and,是一种在JS中将代码分组在一起的方法,具有自己的变量范围,但会立即计算答案window.requestAnimFrame
最终指向任何一个函数,或者指向虚拟实现window.setTimeout(回调,1000/60)
该函数实际上还没有被调用,但代码现在可以调用window.requestAnimFrame(something)
,而不用担心它不存在
(函数(回调){
并结束})的匿名函数
。这被称为and,是一种在JS中将代码分组在一起的方法,具有自己的变量范围,但会立即计算答案窗口
(function(callback) {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000 / 60);
};
})()
window.requestAnimFrame = (function(callback) {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
window.setTimeout(callback, 1000 / 60);
};
})();