您似乎无法立即将调用的函数表达式设置为变量:
var foo = function() {
alert();
}(); // Immediately alerts
foo(); // Returns "Uncaught TypeError: foo is not a function"
foo
原来是未定义的 - 但为什么呢?有没有办法实际保存对立即调用的函数的引用?
答案 0 :(得分:5)
您似乎无法立即将调用的函数表达式设置为变量
这是不正确的
foo
原来是未定义的 - 但为什么呢?
您提供的代码会将IIFE的返回值分配给var foo = function() {
alert();
return 5;
}();
。
如果你有:
foo
5
的值为var foo;
(foo = function () {
alert('works just fine');
})();
。
有没有办法实际保存对立即调用的函数的引用?
是的,但这不是组织代码的好方法:
function foo() {
alert();
}
为什么在声明函数时需要立即调用表达式:
foo();
然后调用函数:
public function update_json_detail() {
$post_data = $this->input->post("POST_ARRAY");
$execute = array();
foreach ($post_data as $data) {
$execute[] = array(
'ID'=> $data['0'],
'MATERIAL' => $data['7'],
'AC' => $data['8']
);
}
print_r($execute);
/* CODE TO INSERT BATCH */
$callback = $this->m_admin->update_eir_to_cost($execute);
}
答案 1 :(得分:4)
除了zzzzBov建议的方法之外,您还可以使用命名函数表达式执行所需操作并从函数返回引用:
var foo = (function foo() {
alert();
return foo; // Return a reference to this function
}()); // Immediately alerts
foo();
然而,如上所述,这似乎不是一个好主意。只需声明函数。
此外,即使不是必需的,将IIFE包装在括号中也被认为是好的形式,因此从一开始就明显它是IIFE。否则,直到你到达最后一行才明白。
答案 2 :(得分:0)
在调用函数的函数之后给出了(),并将该函数的值赋给变量foo。因此,当你试图在下一次调用它时,它表示未捕获的类型函数。只需删除括号。
var foo = function() {
alert();
};