函数
- 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。(标准定义)
- "定义式"申明函数
- "变量式"申明函数(区别是啥?)
- 扩展:函数和方法是什么关系?区别是什么?
Demo
function fun1() {
}
var fun2 = function () {
};
var obj = {
fun3: function () {
}
};
函数调用
- 方法调用
- 函数调用
- 构造器调用
- apply/call 调用
原型(链)
- 一般面相对象语言都有类这样的概念
- 但JavaScript仍然是基于原型的(ES6新增class关键字,只是语法糖)
- JS对象有一个指向一个原型对象的链,查找属性时,会层层向上,直到最顶部
- 实例的原型,指向它的构造函数的prototype属性
-
JS继承的实现方式
作用域
(变量的可用范围)
- JS使用函数作用域
- 作用域在定义时确定,无法更改
- ES6新增块级作用域(let const)
- 全局作用域
- 最外层函数和在最外层函数外面定义的变量拥有全局作用域
- 所有末定义直接赋值的变量自动声明为拥有全局作用域
- 所有window对象的属性拥有全局作用域
Demo
function global() {
var i = 0;
console.log(i);
var inner = function () {
var j = 1;
console.log(i, j);
}
console.log(j);
}
闭包
for (var i = 0; i < 10; i++) {
setTimeout(function () {
console.log(i);
}, 0);
}