理解しようとしている私は「JS」について説明しています。そして、以下のコードをまとめて、得られないものを説明します。私が理解できないのは、名前変数がどこに格納されているかということです。その変数は今グローバルですか?
(function($) {
var name = "";
$.helloWorld = function(yourName) {
name = yourName;
console.log("Hello " + yourName);
}
}(jQuery));
回答:
回答№1は4ザ name
変数は外部関数に対してローカルです。 var
キーワード。内部関数は、その変数への参照を含むクロージャです。これがこれを示すより良い例です。
(function($) {
var name = "";
$.setName = function(newName) {
name = newName;
}
$.showName = function() {
console.log("Name is: " + name);
}(jQuery));
これを定義したら、次のことができます。
$.setName("Larry");
$.showName();
$.setName("Fred");
$.showName();
見る JavaScriptクロージャはどのように機能しますか?
回答№2については2
これはあなたが理解するのを助けるはずです:
(function(){
var name;
var scope1;
// Here you can use scope1 and name
(function(){
var name; // <------------------------
var scope2; // |
// |
// Here you can use scope1,scope2, and name
(function(){
var name; // <------------------------------
var scope3; // |
// |
// Here you can use scope1,scope2,scope3, and name
})();
})();
})();
// Anyvariable declared outside of any function scope is in the global scope.
// A variable declared here can be accessed by window.name from any scope
var name = 5;
このスニペットでは、3つの関数によって3つのスコープが作成されています。最も内側では、ローカル変数だけでなく、一意の名前を持つ変数(scope1、scope2、およびscope3)にアクセスできます。 name
これは、中央のスコープとは別の名前です。そのような変数名を外部スコープ内の変数へのアクセスを防ぐために再利用することは、シャドーイングと呼ばれます。
で宣言されていない変数は、 var
キーワードは自動的にグローバルスコープ内にあると見なされます。グローバルスコープで多くの変数を宣言するのは悪い習慣です。それらは他のスクリプトと衝突しやすいからです。