ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript の自己実行匿名関数 (function() { })() の原理の簡単な分析

Javascript の自己実行匿名関数 (function() { })() の原理の簡単な分析

高洛峰
高洛峰オリジナル
2017-01-04 16:06:351345ブラウズ

関数は JavaScript で最も柔軟なオブジェクトです。ここではその匿名関数の使用法のみを説明します。匿名関数とは、関数名やポインターを指定しない関数を指します。自己実行匿名関数は、その 1 つです。以下では、自己実行関数と呼びます。以下は、最も一般的な自己実行関数の 1 つです。関数の実行:

// 传统匿名函数
(function() {
alert('hello');
})();

このコードの実行効果は、ページがリロードされるときに「hello」がポップアップすることです。何が自動的に実行を促すのでしょうか。 、以下のコードを見てください

// 在传统写法上去掉小括号,并在前面加上运算符 ~,!,+,-
~function(){
alert('hello');
}();
!function(){
alert('hello');
}();
+function(){
alert('hello');
}();
-function(){
alert('hello');
}();

これらの書き込みメソッドの実行と上記の従来の方法に違いはありません

これらの書き込みメソッドの共通の分母は、実際には括弧 () であることがわかりました。従来の方法では、次のような演算子にも属します。 a=b*(c+d),

演算子 + 自己生成パラメータに渡される = 関数が自動的に実行されますか?ただし、「=、*、/」などの一部の記号はサポートされていません。その自己実行の理由はまだ非常に謎であり、インターネット上でまともな答えを見つけることができません

そして、私は不思議な現象を発見しました。これらの演算子は無限のオーバーレイにすることができます。 。 。 。 。 。

// function前面是特定符号可以无限叠加...
~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~!+-~!+-+-!~~~~~~~~+-!!!!!!+function a(b) {
alert('hello');
}();

プログラムは正常に動作します!!!!!!

ただし、エラーが報告される状況は 2 つあります

「+」または「-」記号が 3 つ以上連続して表示されると、エラーが発生します

2つの「+」または「-」記号の後に他の記号が続く場合、「++~」、「--+」などのエラーが発生します

エラーメッセージ: Uncaught ReferenceError: Invalid left-hand side;接頭辞演算の式 (左側の式が間違っているという意味)

次に、同じ記号を使用して変数を操作したところ、まったく同じであることがわかりました。これは、JavaScript の操作が の自動実行を促していることを示している可能性があります。関数を呼び出すこともできますが、操作を通じて関数を呼び出すこともできます。

関数自体が実行されるのではなく、計算によって関数が呼び出されるのです! , ただし一部の計算方法しかサポートされていません。

さらに、この自己実行関数は匿名関数ではない可能性があります!上のコードを見ると、演算子以降の関数内に関数名 a を定義していますが、例外はありませんが、役に立ちません - -! ですが、この a はまだ他のメソッドから呼び出すことはできませんが、呼び出す人も多いと思います。それが匿名関数であることには問題があります。

上記は、編集者が紹介した Javascript の自己実行匿名関数 (function() { })() の原理を簡単に分析したものです。皆さんのお役に立てれば幸いです。

JavaScript の自己実行匿名関数 (function() { })() の原理に関する関連記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。