函数在js中扮演了几个角色?api
构造函数主要用来实例化对象数组
通常普通函数都是用来实现某一个特定的功能浏览器
函数能够做为一个普通对象使用缓存
总结:函数到底扮演什么角色取决于函数的调用方式安全
函数声明的方式:app
下面的代码只会在内存中产生一个函数 节省内存 结果为1的函数函数
下面的代码不可使用,不规范,不能造成隔离的空间,在不一样的浏览器中的处理方式不同,且占用空间,用表达式更节省内存性能
若是函数没有参数,那么Function的参数表示函数体this
若是函数有参数,那么Function最后一个参数表示函数体,以前的表示实际参数spa
以上的new Function()产生函数的缺点:代码的可读性较低的,性能比较低,函数体是字符串,有一个字符串转成js代码的过程比较耗时
new Function()产生函数的优势:能够动态解析js字符串形式的代码---相似于eval()的用法
eval()有安全隐患,推荐用JSON.parse()
函数调用的方式:
这种状况调用, 三者等效
参数处理上:call参数是单个的,apply参数是数组
call/apply的用法:
bind方法的基本使用(ES5新特性),做用也是改变函数内部this的指向
传参:
应用:bind会返回一个新的函数
==
什么是类数组?
类数组是一个对象:对象的键是整数形式的索引,与数组的键相似;必须有length属性,length属性的值与索引形式的键值对的个数相同
注意:类数组不是数组,而且不能够调用数组的方法
能够添加数据,可是length的值不会自动改变
类数组转化:
类数组场景1:document.getElementsByTagName
转化:
添加并调用api:
类数组场景2:jQuery
类数组场景3:arguments
arguments本质是类数组,arguments.length表示实参的个数,
鼠标事件:
传参:
window做为实参的用意:提升性能;方便代码压缩,节省带宽
undefined做为形参的用意:防止undefined的值被修改(早期的低版本浏览器中)
jQuery源代码最外层就是这样作的
关于this
this到底指向谁取决于函数调用的方式
this出现的场景:
在非严格模式下,this指的是window,在严格模式下,this指的是undefined
window
严格模式:对语法规则要求更加严格
构造函数中的this与原型方法中的this指向相同,都指向实例对象
lisi lisi
对象方法中的this就是方法的调用者
hello
定时函数中的this值就是window
window
事件函数中的this指的是绑定事件的对象
input
什么时候须要缓存this?
this的指向发生改变的时候
例子:
高阶函数
hellojerry
lisi
123
111