一、回调函数
二、IIFE
三、函数中的this
四、关于语句分号问题
五、原型与原型链
六、探索instanceof
七、执行上下文
八、作用域与作用域链
一、回调函数
二、IIFE(立即调用函数表达式)
也可用于编写 js 模块
var a = function (){ console.log("a"); } function b(){ console.log("b"); } (function c(){ //匿名函数自调用这个和IIFE其实是同一个概念的 console.log("c"); })()
最后打印出来的 只有 c
那就有一个疑惑了,为什么不能直接把这个匿名函数的内部代码直接在外面写了,而是要用这个“包”起来呢?
因为包起来的话,就是一个局部了,里面的变量就是一个局部变量,不会影响全局变量
(function d(){ var a = 1; function test(){ console.log(++a); } function test2(){ console.log("test2"); } window.$ = function(){ return { test: test } } })(); $().test()
这种的话,就是把test向外暴露了,暴露为一个全局函数,但是test2没暴露出来,这也是匿名函数的一个功能了
其中不要被$里面了,在匿名函数d中,我们给这个$定义了一个函数,$其实就是一个函数,这个函数执行之后,就会返回一个对象
这个对象的名字叫做test,然后就可以通过test()来调用这个test函数了
三、函数中的this
扩展:函数call
https://www.w3school.com.cn/js/js_function_call.asp
四、关于语句分号问题
一般在做项目的时候,如果用到很多js文件的话,都是在这个文件开始的时候添加上一个分号,防止代码合并的时候会出错的
五、原型与原型链
1、原型prototype
下面是打印 Date.prototype 的结果
可以看到是一个object类型的,然后里面有很多内置的方法,这些方法都是给实例对象使用的
如果是这样打印的话,就是一个龙的object,但是我们可以人工的给这个函数原型添加方法
返回了两个 true
也就是说构造函数和它的原型对象是有一种相互引用的关系,也就是构造函数的一个叫做prototype的属性可以找到这个构造函数的原型
并且这个构造函数的原型里面也有一个属性 叫做 constructor 可以找到这个构造函数本身
2、显示原型和隐式原型