1、使用 Function 创建函数与原来的方式创建函数:
Function 是使用字符串构建函数, 那么就可以在程序运行过程中构建函数
将数组形式的字符串, 转换成数组对象
var arr = ( new Function( ‘return ‘ + str + ‘;‘ ) )();
2、eval();不常用,易受恶意攻击。用()将其转换成表达式,{}不再是语句块,转换成代码块而是对象了
3、变量名提升:预解析(标记声明)、代码执行、调用
4、函数声明与函数表达式有区别:函数声明是单独写在一个结构中, 不存在任何语句, 逻辑判断等结构中。(在我看来还有一点就是没有等号)
5、作用域:域表示的就是 范围, 即 作用范围. 就是一个名字在什么地方可以被使用, 什么时候不能使 用
6、在js中采用词法作用域:词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行,作用范围就已经确定好了. 这个就是所谓词法作用域.在 js 中词法作用域规则:1. 函数允许访问函数外的数据.2. 整个代码结构中只有函数可以限定作用域.3. 作用规则首先使用提升规则分析4. 如果当前作用规则中有名字了, 就不考虑外面的名字
7、作用域链: 函数内指向函数外的链式结构.(画图:成员声明)
8、闭包:有一个具有封闭的对外不公开的, 包裹结构, 或空间。js 中函数可以构成闭包。允许函数访问外部的数据, 外部无法访问函数内部的数据。闭包是为了实现 具有私有访问空间的 函数的
1. 写一个函数, 函数内定义一个新函数, 返回新函数, 用新函数获得函数内的数据
2. 写一个函数, 函数内定义一个对象, 对象中绑定多个函数( 方法 ), 返回对象, 利用对象的方法访问函数内的数据
3、如何完成读取一个数据和修改这个数据:get_num: set_num :function(value){}
9、闭包的性能问题:函数执行需要内存, 那么函数中定义的变量, 会在函数执行结束后自动回收. 凡是因为闭包结构, 被引出的数据. 如果还有变量引用这些数据的话, 那么这些数据就不会被回收.因此在使用闭包的时候如果不使用某些数据了, 一定要赋值一个 null