javascript 忍者秘籍读书笔记

书名

"学徒"=>"忍者"

性能分析

console.time('sss')
console.timeEnd('sss')

函数

函数是第一类对象

通过字面量创建
function minjaFunction(){}

在变量或数组或者对象中的函数

let obj = {
    name: 'zhangsan',
    age() {
        return 1
    }
};
let arr = [1, 2, 3, 4, () => {
    return 1;
}];
let nums=()=>{}

作用函数的参数来传递(高阶函数)

add=(x,y,f)=>{
    return f(x)+f(y)
};
add(1,3,x=>x);

作用函数的返回值(闭包)

add=()=>{
    let a=1;
    return ()=>{
        console.log(a)
    }
}

具有动态创建和分配的属性(回调函数)

var add=function(){
    console.log(add.age);
};
add.age='zhangsan';
add();

回调函数
函数作用另一个函数的参数,随后通过参数来调用该函数
function useless(nin){
    return nin();
}

函数和对象的唯一区别

函数是可调用的,函数会被调用执行某项动作或者功能

纯函数缓存??

定义函数的方式

函数声明
function myFunction(){}

箭头函数(lambda函数)
item=>item*2

函数构造函数
let add=new Function('a','b','return a+b')
console.log(add(1, 3));

生成器构造函数

function* myGen(){
    yield 1;
}

let a = myGen();
console.log(a.next());

函数表达式
let a=()=>{}

立即执行函数
()()
+function(){}();
-function(){}();
!function(){}();
~function(){}();

函数的实参+形参

形参是定义的时候传递的变量
实参是调用的时候传递的变量

剩余参数
...
默认参数
a=(a,b=0)=>{}

函数调用

this: 调用函数的上下文对象

arguments 参数表示函数调用过程中传递的所有参数
... 代替了arguments要做的事
let a=(...b)=>{console.log(b)} //箭头函数没有arguments

function a(){
    console.log(Array.from(arguments));
}
> argumeng.length
> arguments是个伪数组

function fun(a = 3) {
    arguments[0]=133;
    console.log(a);
}
fun(10);//10
arguments只看调用的参数

调用函数的四种方式
* 作用函数
    > func()   直接调用
    > 作用函数被调用 this->window
* 作为方法
    > a.func()  关联在一个对象上,实现面向对象编程
    > 作用方法被调用,this-> 这个对象
* 构造函数
    > new func() 实例化一个新的对象
    > new 调用函数会触发
        > 创建一个新的空对象
        > 该对象作用this参数传递给构造函数
        > 新构造的对象作为new运算符的返回值
    
* 通过函数的apply和call
    > func.apply(null,[a,b])
    > func.call(null,a,b)
* 通过bind() 改变this的指向  需要在后面加上() 让他执行

..........................................................................................................................................................

猜你喜欢

转载自www.cnblogs.com/fangdongdemao/p/10821213.html