我正在閱讀pallet.js的源代碼,並且遇到了這個問題。爲什麼這個javascript是必需的?
var ret = (function(proto) {
return {
slice: function(arr, opt_begin, opt_end) {
return proto.slice.apply(arr, proto.slice.call(arguments, 1));
},
extend: function(arr, arr2) {
proto.push.apply(arr, arr2);
}
};
})(Array.prototype);
var slice = ret.slice;
var extend = ret.extend;
爲什麼這是必要的?爲什麼他們能不能簡單地寫:
var slice = function(arr,opt_begin,opt_end) {
return Array.prototype.slice.apply(arr,[opt_begin,opt_end]));
}
var extend = function(arr,arr2) {
return Array.prototype.push.apply(arr,arr2);
}
編輯1:
在回答重複的問題。我不認爲這是重複的,但是這個問題肯定會解決我的問題。所以這是一個優化。但是每個人都不會被評估一次嗎?那麼對於兩個函數調用,是否真的有重大改進?
另外,如果我們擔心性能,爲什麼我們調用proto.slice.call(arguments,1)
而不是手動構建兩個元素的數組[opt_begin,opt_end]
,是切片更快?
可能重複[是解引用變量有用封閉?](http://stackoverflow.com/questions/8288664/is-a-closure-for-dereferencing-variables-useful) – Bergi