函數es6
定義windows
var a =function (){...}; 匿名函數方式定義
function a(){} 直接定義數組
函數的參數
arguments
能夠接收任意個參數,是個像數組的內容,可for inapp
rest參數 es6新增函數
function foo(a,b,...rest)
這時候若是傳入多於兩個參數,後面的參數會合併成一個數組 rest,rest只能寫在後面this
變量的做用域與解構賦值rest
若是同名,以最內部的爲主,外部函數使用外部的,code
變量提示,只提高聲明,不提高值對象
全局做用域 不在任何函數內部定義的變量就具備全局做用域 js 默認的 windowstoken
這說明JavaScript實際上只有一個全局做用域。任何變量(函數也視爲變量),若是沒有在當前函數做用域中找到,就會繼續往上查找,最後若是在全局做用域中也沒有找到,則報ReferenceError錯誤。
名字空間
不一樣的js文件,若是使用了相同的全局變量,會形成覆蓋掉,減小衝突的一個方法是把本身全部的變量和函數所有綁定到一個全局變量中
var myapp={}
myapp.name='xx'
myapp.fun=function(){
...
}
export myapp
export 與 export default 的區別
引入的時候不一樣 export 須要帶{} import { 。。。} from ...
export default 不須要 import xxx from xxxx
變量 與常量
let const
解構賦值
let [x, [y, z]] = ['hello', ['JavaScript', 'ES6']];
若是忽略某幾個元素 用逗號分開
let [, , z] = ['hello', 'JavaScript', 'ES6'];
對象的解構賦值,能快速取出對象中的某些屬性
let person={
name:'xxx',
sex:'xxx',
age:'xxx'
}
let {name,age,sex}=person
一樣可嵌套
var person = {
name: '小明',
age: 20,
gender: 'male',
passport: 'G-12345678',
school: 'No.4 middle school',
address: {
city: 'Beijing',
street: 'No.1 Road',
zipcode: '100001'
}
};
var {name, address: {city, zip}} = person;
name; // '小明'
注意,若是訪問的屬性不存在,會undefinded
給值重命名
var {name, address: {city:xxx, zip}} = person;
這時候xxx==person.city
指定默認值
var {name, single=true} = person;
注意:若是變量已經被聲明瞭,就不能再解構了,Uncaught SyntaxError: Unexpected token =
// 聲明變量:
var x, y;
// 解構賦值:
{x, y} = { name: '小明', x: 100, y: 200};
方法 :在一個對象中綁定函數,稱爲這個對象的方法
修復this 指向
apply(this,[]),第一個是須要綁定的this變量,及誰能調用的了他,第二個爲函數自己的參數
call(this,arg1,arg2),區別就是把參數打散一個個傳
注意 對普通函數調用,咱們一般把this綁定爲null。
所以 parseInt.apply(null,arguments) 與普通的parseInt 功能同樣
裝飾器
var count = 0;
var oldParseInt = parseInt; // 保存原函數
window.parseInt = function () {
count += 1;
return oldParseInt.apply(null, arguments); // 調用原函數
};
這個函數的做用就是改寫了parseInt 函數,給他增長了一個調用計數的功能