严格模式
JavaScript除了提供正常模式外,还提供了严格模式.ES5的严格模式是采用具有限制性JavaScript变体的一种方式,即在严格的条件下运行JS代码
严格模式对正常的JavaScript语义做出了要求
舍友在睡觉,懒得打字了
在立即执行函数里面为脚本开启严格模式
本文由“壹伴编辑器”提供技术支持
严格模式中的变化
注意:事件,对象和定时器里的this指向的还是window
② 不允许在非函数的代码块里声明函数,比如if里面,for循环里,但是可以调用
高阶函数
高阶函数是对其他的函数进行操作的函数,它接收函数作为参数或函数作为返回值输出
函数也是一种数据类型,同样可以作为参数,传递给另一个参数使用.最典型的就是作为回调函数.
本文由“壹伴编辑器”提供技术支持
接下来是重点
闭包
变量根据不同可以分为两种:全局变量和局部变量
什么是闭包
闭包(closure)指有权访问另一个函数作用域中变量的函数;简单理解就是,一个作用域可以访问另一个函数内部的局部变量.
被访问的变量所在的函数就是闭包函数,我们可以来看看我们以前写过的闭包.
我们还可以让外面的作用域访问fn内部的局部变量:
做了一下分析,但是可能会看不懂,画的有点乱,我文字解释一下:首先就是调用了fn这个外层的函数,然后声明赋值了num这个变量,由于没有调用fun函数,所以直接跳到了return fun;此时就将整个函数,赋值给了fn(),又因为f接收了函数fn()的返回的值,所以此时f = function fun(){......},最后的f()就相当于调用了fun函数.
还可以再改进一下,上面的方法还是比较麻烦的
闭包的作用: 延伸了变量的作用范围
下面看第一个使用闭包的例子:循环注册点击事件
html:
script:
立即执行函数也称为小闭包,因为立即执行函数里面的任意一个函数都可以使用它的i这个变量
这里解决的我很久的疑惑,就是为什么这样的的写法是错误的,不管点击哪个li打印出来的索引都是4,这里其实是同步和异步的关系,onclick点击事件的异步的,但是我们的循环是同步任务,所以会立即执行,最后就变成了4.
第二个小例子:循环中的setTimeout()
其实和上面差不多吧
案例3: 计算打车价钱
打车起步价在3公里以内为13元,之后每多一公里增加5块钱,用户输入公里数就可以计算打车价格,如果有拥堵情况则要加收10元拥堵费.
最后的结果:
先这样吧,睡觉啦!