JS的語(yǔ)法跟swift很像,以下代碼有幾個(gè)知識(shí)點(diǎn):
- 函數(shù)的定義
- 匿名函數(shù)的使用,作為參數(shù)/返回值,和OC的block,swift的閉包差不多。
- 變量的作用域:JS變量的作用域根據(jù)函數(shù)來(lái);OC變量的作用域根據(jù){}來(lái)
- 創(chuàng)建對(duì)象的兩種方式。
<script>
//1.1 加法運(yùn)算
function sum(num1,num2) {
return num1 + num2;
}
// 如何調(diào)用
var result = sum(12,20);
console.log(result)
//1.2 萬(wàn)能的加法函數(shù)
function sum2(numbers) {
var result = 0;
for(var i in numbers){
result += numbers[i];
}
return result;
}
var result1 = sum2([3213,23,21,312,321,312,31]);
console.log(result1);
//1.3 匿名函數(shù) -- 相當(dāng)于OC中的Block -- 相當(dāng)于Swift中的閉包
var res = function () {
console.log('我是匿名函數(shù)');
}
//調(diào)用匿名函數(shù)
function funct(block) {
block();
}
funct(res);
//JS中的閉包!!!
function func1(num1) {
return function (num2) {
return num1 + num2;
}
}
var temp = func1(4);
var temp2 = temp(5);
console.log(temp2);
//作用域
//代碼塊的作用域
var t = 'hank'; //全局變量
if(true){
var t = 'Dream'; //JS中哥么還是一個(gè)全局變量!!
}
console.log(t);
//函數(shù)的作用域
function test() {
var t = 'Jack';//里面就是局部變量!!!
}
test();
console.log(t);
//這是一種寫法
var obj = new Object();//創(chuàng)建一個(gè)對(duì)象obj
obj.age = 5;//給對(duì)象定義屬性
obj.click = function () { //創(chuàng)建對(duì)象函數(shù)
alert("我被單擊了");
}
//另一種寫法
var obj1 = {
age:5,
click:function () {
alert("我也被點(diǎn)擊了");
}
}
</script>
創(chuàng)建對(duì)象的這兩種方式都有個(gè)弊端,每次創(chuàng)建同類型的對(duì)象都要寫一樣的代碼,屬性越多重復(fù)代碼就越多,那怎么進(jìn)行抽象封裝?就要想到類,構(gòu)造函數(shù),像iOS中的構(gòu)造函數(shù)是alloc、init,那么JS的構(gòu)造函數(shù)要怎么創(chuàng)建呢??jī)刹饺缦拢?/p>
- 函數(shù)返回對(duì)象
- new 對(duì)象
<script>
//普通函數(shù)
//new
var Dog = function (name,age,height) {
this.name = name;
this.age = age;
this.height = height;
this.eat = function (someThing) {
console.log(this.name + '吃'+someThing)
};
this.run = function (someWhere) {
console.log(this.name + '跑'+someWhere)
}
}
//創(chuàng)建對(duì)象
var dog1 = new Dog('小黃',18,1.1)
var dog2 = new Dog('旺財(cái)',17);
console.log(dog1,dog2);
dog1.eat('板燒雞腿堡')
dog2.eat('叉燒包')
</script>
JS創(chuàng)建對(duì)象
<script>
//1.創(chuàng)建對(duì)象
var dog={
name:'xiaohuang',
age:18,
height:1.2,
dogFriends:['laifu','lisi'],
eat:function (someThing) {
console.log(this.name+'吃!'+someThing);
},
//this就是此函數(shù)屬于哪個(gè)對(duì)象,那么this就代表這個(gè)對(duì)象!
run:function (where) {
console.log(this.age+'跑'+where);
}
};//object
console.log(dog.name,dog.age);
dog.eat('板燒雞腿堡');
dog.run('家里');
</script>