函數是定義一次但能夠調用或執行任意屢次的一段JavaScript代碼。數組
函數也叫作方法(瞭解概念)函數
當一個函數在一個對象上被調用的時候,這個函數就叫作方法。 此時, 它的調用所在的對象就會做爲函數的一個隱式的參數來傳遞。this
// 函數
function func() {
}
var obj = {
age: 18,
getAge: function() {
// 方法
}
};
//函數:是直接調用
//方法:是經過對象調用的
// 函數聲明的基本語法
// function關鍵字、funcname、小括號、大括號都是必需的
// 參數不是必需的
function funcname([arg1 [,arg2 [..., argn]]]) {
statements
}
// 函數調用語法:函數名後面跟運算符()來調用
funcname();
1 函數聲明不能出如今相似:if語句中(儘管不報錯,但這是糟糕的作法!若是這麼作了,容易出現混亂)對象
2 funcname是要定義的函數名,必須是一個標識符(不要使用保留字或關鍵字),而不能是字符串或者表達式。ip
3 包含在小括號中的0個或多個參數,參數用逗號隔開作用域
4 大括號內的是函數主體,包含了多條語句字符串
5 return語句,無關緊要。get
6 函數命名推薦使用帕斯卡命名法,即第一個單詞後的全部單詞都以一個大寫字母開始。回調函數
//形參(函數聲明時候的參數)
function f(a, b) {} // a,b是形參,佔位用,函數定義時形參無值
//實參(函數調用時候的參數)
var x = 5,
y = 6;
f(x, y); //x,y實參,有具體的值,會把x,y複製一份給函數內部的a和b
由於可使用方括號語法訪問它的每個元素(即第一個元素是 arguments[0] ,第二個元素是 argumetns[1] ,以此類推),使用 length 屬性來肯定參數長度。 沒有傳遞值的命名參數將自動被賦予 undefined 值,跟定義了變量但又沒有初始化同樣。string
function testArguments() {
console.log("第一個參數爲:" + arguments[0]);
}
testArguments("123"); // 第一個參數爲:123
// funcname 能夠省略
var func = function funcname() {
statements
};
var func = function fun () {
console.log(fun); // 函數體
};
func();
console.log(fun); // Uncaught ReferenceError: fun is not defined
// 基本數據類型
function add(num) {
num = num + 10;
return num;
}
var count = 20;
var result = add(count);
console.log("count的值爲:" + count); // ??
console.log("result的值爲:" + result); // ??
// 複雜數據類型
// 1.
function setAge(obj) {
obj.age = 18;
}
var person = new Object();
person.age = 30;
setAge(person);
console.log(person.age); // ??
// 2.
function setName(obj) {
obj.name = "小明";
obj = new Object();
obj.name = "小紅";
}
var person = new Object();
person.name = "Jack";
setName(person);
console.log(person.name); // ??
數據類型
基本數據類型 string number boolean null undefined
複雜數據類型 Object
獲取變量的數據類型: typeof 變量名 或者 typeof(變量名)
基本類型(值類型)在棧中存儲
引用類型的對象在堆中存儲,地址在棧中存儲
什麼是對象
對象其實就是一組數據和功能的集合 鍵值對的集合
對象能夠方便地描述和模擬客觀事物
// 建立一個對象
var obj = new Object();
// 給對象設置屬性
obj.name = "小明";
obj.age = 18;
JavaScript中的對象:無序屬性的集合,其屬性能夠包含基本值、對象或者函數。
嚴格來說,這就至關於說對象是一組沒有特定順序的值。對象的每一個屬性或方法都有一個名字,
而每一個名字都映射到一個值。
對象與數字、字符串、布爾值這樣的數據類型不一樣,它們不是表示一個單個的值,而是值的集合。
對象是已命名值的一個集合。
數字、字符串、布爾值是簡單數據類型
對象是複雜數據類型
// 使用 new 操做符,後面跟 Object構造函數調用,來建立對象
// 此時,返回值:obj,就是新建立出來的對象
var obj = new Object();
// 給對象添加屬性
obj.name = "靜靜";
obj.age = 18;
obj.getName = function () {
return this.name; // 靜靜
};
// 語法規則
var person = {
// 屬性名: 屬性的值
// 使用逗號來分隔不一樣的屬性(若是當前屬性後面還有其餘屬性的話)
name: "Nicholas",
age: 18
};
// 建立對象設置屬性
var person = {
name: "加引號的屬性名稱",
0: "屬性名爲數值類型,那麼這裏的數值屬性名會自動轉換爲字符串"
};
// 建立一個空對象,沒有任何屬性
var person = {};
1. 對象字面量是對象定義的一種簡寫形式,目的在於簡化建立包含大量屬性的對象的過程。
2. 語法規則中,左邊的花括號({)表示對象字面量的開始,由於它出如今了表達式上下文中。
3. 對象字面量的屬性名,能夠不加引號 也能夠加引號(單引號或者雙引號均可以)
// 建立一個空對象
var obj = {};
// 使用點運算符(.)來設置屬性的值
obj.name = "這是name屬性的值";
obj.age = 18; // 給age屬性設置值:18
// 使用方括號[]來設置屬性的值,注意:要訪問的屬性是字符串的形式或者是變量
obj["font-size"] = "30px";
// 獲取屬性的兩種方式
console.log(obj.name);
console.log(obj["name"]);
區別:
1. 均可以用來設置或者獲取對象的屬性。
2. 方括號([])能夠經過變量來訪問屬性。
3. 屬性名中包含會致使語法錯誤的字符,或者屬性名使用的是關鍵字和保留字,使用方括號表示法。
例如:obj["first name"],因爲"first name"中包含一個空格,因此不能使用點表示法來訪問它。
而後,屬性名中是能夠包含非字母非數字的,這時候就可使用方括號表示法來訪問它們。
4. 除非必須使用變量來訪問屬性,不然推薦使用點表示法。
var obj = {
name: "明哥",
age: 18,
weight: 50
};
for(var ob in obj) {
// ob 爲屬性名
// obj[ob] 爲屬性名對應的值
console.log("屬性 " + ob + " 的值爲:" + obj[ob]);
}
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person("猴哥", 18);
console.log(p.name);
console.log(p.age);