先看以下示例:
function
test()
return subtest;
}// 呼叫1
console.
log(
test()
());
//1console.
log(
test()
());
//1// 呼叫2
var fn =
test()
;console.
log(fn(
));//1
console.
log(fn(
));//2
從示例中我們不難看出,呼叫1和呼叫2都是通過將內部函式subtest作為外部函式test的返回值,從而進行內部函式的呼叫,為什麼最後列印出的結果卻不同呢
根據結果進行初步分析,呼叫1是進行了雙重呼叫,也就是在呼叫了外部函式test之後,緊接著呼叫了內部函式subtest,每次subtest的a++都是建立在外部函式test的定義的a的數值上的
所以每次執行時,a是test函式的區域性變數,每次的值都會重新賦值為1呼叫2首先呼叫test函式,將返回值subtest函式賦值給變數fn,之後直接呼叫fn,也就是直接呼叫了subtest內部函式
所以每次執行時,a相對於subtest函式是全域性變數,每次呼叫的值都會儲存假設將a作為整個函式的全域性變數
var a =1;
function
test()
return subtest;
}// 呼叫1
console.
log(
test()
());
//1console.
log(
test()
());
//2// 呼叫2
var fn =
test()
;console.
log(fn(
));//3
console.
log(fn(
));//4
每次呼叫的值都發生變化,可見先前的分析的結論是正確的
為了實現arr1和arr2兩個陣列的拼接,寫了如下**
var arr1 =[1
,2,3
];var arr2 =[4
,5];
array.prototype.
combo
=function
(arr)
} arr1.combo.
(this
.arr2)
;//間接呼叫失敗
console.
log(arr1)
;//undefined
結果失敗,最後列印出undefined,下面開始嘗試修改,並尋找失敗原因
var arr1 =[1
,2,3
];var arr2 =[4
,5];
array.prototype.
combo
=function
(arr)
}arr1.
combo
(arr2)
;//直接呼叫
console.
log(arr1);[
1,2,
3,4,
5,f]
經過修改,最後勉強將兩個陣列進行了合併,但是最終陣列長度多了1,於是作者特地進行了查詢,最後找到兩種拼接陣列的簡單方法
拼接2個陣列
var arr1 =[1
,2,3
];var arr2 =[4
,5];
array.prototype.push.
(arr1,arr2)
;//返回原陣列
console.
log(arr1)
;//拼接2個
直接給陣列原型呼叫push方法並間接呼叫arr1,arr2兩個陣列,返回陣列arr1拼接多個陣列
var arr1 =[1
,2,3
];var arr2 =[4
,5];
var arr3 =[6
,7];
var arr = arr1.
concat
(arr2,arr3)
;console.
log(arr)
;//拼接多個
使用concat方法給乙個陣列新增元素
物件導向 初識物件導向
面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...
物件導向程式設計01 面向過程 物件導向
前面12講我已經寫完了從零開始學j ase 慶祝完結撒花!那麼從今天開始正式步入物件導向程式設計。建議開啟本章之前先回顧 j ase010方法詳解和 j a變數與方法的呼叫 同類操作中與跨類操作中的對比 物件導向程式設計 oop object oriented programming 物件導向程式設...
物件導向過程與物件導向
物件導向過程與物件導向 1 程式的發展經歷了兩個階段 面向過程 物件導向。2 對於物件導向與面向過程可以用乙個例子解釋,如乙個木匠要做乙個盒子,那麼這個盒子的出發點會有兩種方式 物件導向 先想好要做的盒子,之後在去找相應的工具去做。面向過程 不去想要做什麼樣的盒子,隨需取工具。物件導向三大特徵 封裝...