これは、
var shorts = { pos: "position", w: "width", h: "height", l: "left", t: "top" };
function fullname(name){
return shorts[name] || name;
}
...それがすることで。しかし
var fullname = function(){
var shorts = { pos: "position", w: "width", h: "height", l: "left", t: "top" };
return function(name){
return shorts[name] || name;
}
}();
shorts...ハッシュ/オブジェクトが*関数に対してのみプライベートであることを保証しますfullname*。
だからあなたの質問に答えるために、
function fullname(name){
var shorts = { pos: "position", w: "width", h: "height", l: "left", t: "top" };
return shorts[name] || name;
}
Here'shortsは 内に隠されていますfullnameが、Dogbert が指摘するように、各呼び出しでshortsハッシュが作成されるため、遅くなります。
しかし、これにより、両方の長所が得られます。
var fullname = function(){
var shorts = { pos: "position", w: "width", h: "height", l: "left", t: "top" };
return function(name){
return shorts[name] || name;
}
}();
shorts非公開のままfullname
であると同時に、一度shortsだけインスタンス化されるため、パフォーマンスも良好になります。
これは、IIFE (Immediately Invoked function expression) と呼ばれるものです。アイデアは、関数A内に関数を作成し、関数のみがそれらを見ることができるように、関数のスコープ
内で関数Bに使用する変数を宣言することです。ABA
var B = function(){
// this is B
//
val foo = {x:1}; // this is ONLY for A
val A = function(arg0) {
// do something with arg0, foo, and whatever
// and maybe return something
};
return A;
};
val A = B();
ご覧のとおり、それは
var A = (function(){
// this is in 'B'
//
val foo = {x:1}; // this is ONLY for A
return function(arg0) { // this is in A
// do something with arg0, foo, and whatever
// and maybe return something
};
})(/*calling B to get A! */);
機能的には、これはまったく同じです
val foo = {x:1}; // foo is visible OUTSIDE foo!
val A = function(arg0) {
// do something with arg0, foo, and whatever
// and maybe return something**strong text**
};
他の用途は見当たりません。
したがって、これは変数を非公開に保つ方法であり、同時にパフォーマンスを低下させません。
( JavaScript の (function() { } )() コンストラクトとは? を参照)