在JavaScript中,什么时候需要使用this:
(function(){
//Bunch of code...
})();
在这个问题上:
//Bunch of code...
在JavaScript中,什么时候需要使用this:
(function(){
//Bunch of code...
})();
在这个问题上:
//Bunch of code...
简短回答是:为了防止全局(或更高级别)范围的污染。
IIFE(立即调用的函数表达式)是编写插件、附加组件、用户脚本或其他期望与其他人的脚本一起工作的脚本的最佳实践。这确保您定义的任何变量不会对其他脚本产生不良影响。
这是另一种编写IIFE表达式的方法。我个人更喜欢以下方法:
void function() {
console.log('boo!');
// expected output: "boo!"
}();
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void
从上面的例子可以清楚地看出,立即调用函数表达式(IIFE)也会影响效率和性能,因为预计只运行一次的函数将只被执行一次,然后被永久地丢弃。这意味着函数或方法声明不会保留在内存中。void
的这种用法。我喜欢它。 - Ej.var globalvar = "globalvar"; // this var can be accessed anywhere within the script
function scope() {
alert(globalvar);
var localvar = "localvar"; //can only be accessed within the function scope
}
scope();
基本上,自执行函数允许编写代码而不必考虑其他 JavaScript 代码块中变量的命名方式。
您可以使用此函数返回值:
var Test = (function (){
const alternative = function(){ return 'Error Get Function '},
methods = {
GetName: alternative,
GetAge:alternative
}
// If the condition is not met, the default text will be returned
// replace to 55 < 44
if( 55 > 44){
// Function one
methods.GetName = function (name) {
return name;
};
// Function Two
methods.GetAge = function (age) {
return age;
};
}
return methods;
}());
// Call
console.log( Test.GetName("Yehia") );
console.log( Test.GetAge(66) );
首先,您必须访问MDN IIFE,现在关于此的一些要点
(function(){
var foo = {
name: 'bob'
};
console.log(foo.name); // bob
})();
console.log(foo.name); // Reference error
鉴于你的简单问题:“在javascript中,何时想要使用this:…”
我喜欢@ken_browning和@sean_holding的答案,但这里有另一个用例,我没有看到提到:
let red_tree = new Node(10);
(async function () {
for (let i = 0; i < 1000; i++) {
await red_tree.insert(i);
}
})();
console.log('----->red_tree.printInOrder():', red_tree.printInOrder());
其中Node.insert是一种异步操作。
我不能在函数声明时调用await而不使用async关键字,并且我不需要为以后使用命名函数,但需要等待该插入调用或者需要其他更丰富的功能(谁知道呢?)。
Javascript中的自执行函数:
自执行表达式是自动开始(调用)的,而不需要被调用。自执行表达式在创建后立即被调用。这主要用于避免命名冲突以及实现封装。变量或声明的对象在该函数之外是不可访问的。为避免最小化问题(filename.min),始终使用自执行函数。
由于 Javascript 中的函数是一等对象,因此通过这种方式定义函数,它有效地定义了一个类,类似于 C++ 或 C#。
该函数可以定义局部变量,并且可以在其中拥有函数。内部函数(有效的实例方法)将访问局部变量(有效的实例变量),但它们将与脚本的其余部分隔离。
看起来这个问题已经被回答了,但我还是会发表我的意见。
我知道什么时候喜欢使用自执行函数。
var myObject = {
childObject: new function(){
// bunch of code
},
objVar1: <value>,
objVar2: <value>
}
object: {
childObject: {
childObject: {<value>, <value>, <value>}
},
objVar1: <value>,
objVar2: <value>
}
一般来说编程有很多晦涩难懂的方式可以实现同样的功能,让你不禁想问:“为什么要这么做?”但是新的情况不断出现,你不能再仅依赖基本/核心原则。