js基础 -函数
函数
定义
var a =function (){...}; 匿名函数方式定义
function a(){} 直接定义
函数的参数
arguments
可以接收任意个参数,是个像数组的内容,可for in
rest参数 es6新增
function foo(a,b,...rest)
这时候如果传入多于两个参数,后面的参数会合并成一个数组 rest,rest只能写在后面
变量的作用域与解构赋值
如果同名,以最内部的为主,外部函数使用外部的,
变量提示,只提升声明,不提升值
全局作用域 不在任何函数内部定义的变量就具有全局作用域 js 默认的 windows
这说明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 函数,给他增加了一个调用计数的功能