一.回调函数
- 回调函数用在哪?
以后做业务,80%与函数相关的语法都是回调函数. - 基础语法
设计使用回调函数
这里tool是一个回调函数,可以通过fn内部的tool再调用tool这个函数工具.
因为这里没学多少,我也举不了更多例子.
二.闭包
- 闭包的基本概念:具有作用于的代码块.
- 我自己的理解是这样的:函数中有局部变量,局部变量不能被外部访问,所以不会在整个代码中产生额外负担,这样可以避免全局污染.当我们用一个函数去调用有局部变量的这个函数,这样返回值能被外部访问,我们就可以通过一个函数调用局部变量内部的变量达到目的.
- 函数都会有自己的作用域,而函数每一次调用都会重新执行所有代码,这时局部变量里的形参和变量会重新声明,这样我们就可以通过局部作用域声明的局部变量保存临时数据.
- 注意!函数只有在调用的时候才会执行内部的代码
这里我在学的时候感觉不能很好的表达这个知识点,不知道该列举什么例子,我还是会在做题中对闭包有更深的了解.
三.小括号
举例讲解
1
var a=20
var b=30
// var re=a+20
var c=(a+20)*b // 这里先当与 re*b 值为40 (a+20)小括号的作用是将这个表达式指向40这个结果
2
var a=20
// var b1=a<30
if(a<30){}//指向了一个布尔表达式的结果
3
for(var i=0;i<10;i++){
}//这里()指向for的逻辑语句
4
function fn (name,age) {
}
//()里写的是形参,把形参在局部作用域隐式声明为变量
5
fn(100,200,300)
指向实参对象 指向'函数的开关' call 让函数的代码块执行
6
((a+10)-5*2)
自定义运算表达式,小括号让它执行起来并指向表达式的结果
(function () {
console.log(66666)
})()// 匿名函数使用;先保存到容器() 再通过()取出来用
做两道题试试:
1
var name="marry"
var obj1={name:"jack"}
var obj2={name:"karen",say:function(){console.log(this.name)}};
(obj1.say=obj2.say)()//把obj2的say方法赋给obj1的say,让obj也可以使用,这里方法的调用者是window
//所以这里打印marry
2
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() {
return function() {return this.name};//
}
};
console.log(object.getNameFunc()());//object调用getNameFunc的方法,再在这个方法中调用()里面的函数,函数不能调函数所以是window调用的,所以打印The window
这里再讲一下函数调用者的判断:
fn()==>window
xxx1.xxx2[100].xx3() ==>xxx1.xxx2[100] 取出来的对象
arguments[0]() ==>arguments
xxx()()==>window fn()
(xx.xxx=xx2.xx2)() ==> window
(obj.xxx)()==>obj