高阶函数,作用域,闭包,沙箱

本文深入探讨JavaScript中改变this指向的方法,包括call、apply、bind的使用,以及高阶函数的概念。同时,介绍了作用域、闭包、沙箱等进阶主题,帮助读者全面掌握JS函数的高级应用。

改变this指向

  1. call
    函数名.call(对象,原函数参数) -----修改的同时调用了函数

  2. apply
    函数名.apply(对象,[参数以数组形式存在] ) -----修改的同时调用了函数

  3. bind
    函数名.bind(对象,原函数参数) -----修改了this指向,函数没有被调用, 将会返回结果保存之后,再调用。

高阶函数

  • JavaScript的函数其实都指向某个变量。
    既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

简单的理解就是,函数中的参数是 函数,或返回值是 函数,这种函数就是高阶函数

函数中的成员

  1. arguments 凡是函数调用, 都会默认含有一个 arguments 对象. 可以将其看做为 “数组”.
  2. caller: 调用这个函数的函数
  3. length: 函数的 length 属性. 表示定义函数时, 形参的个数
  4. name: 函数名-----只读
  5. caller 表示调用函数的函数

作用域

在JS当中,只有函数才能限定作用域, 其他均不能限定访问范围。
结论:

  1. 在代码中只有函数可以限定作用范围. 允许函数访问外部的变量. 反之不允许.
  2. 在函数内优先访问内部声明的变量, 如果没有才会访问外部的.
  3. 所有变量的访问规则, 按照预解析规则来访问

作用域链
是用来做变量查找的. 因此变量可以存储什么东西. 链中就应该有什么东西.

预解析
代码在执行之前,需要快速的 “预览” 一遍. 会检查错误语法,也可以尽可能提高执行效率。
js 在预解析的过程中完成了声明部分的标记变量作用域的设定

js 中声明有两部分: 变量的声明函数的声明

闭包
在 js 中函数是一个具有变量作用域隔离特性的一个内存结构, 即为一个闭包.
闭包解决了:在全局作用域下访问到局部变量

// 闭包模式一:函数模式,函数A中有一个函数B
    function f1() {
        var num=10;
        function f2() {
            console.log(num);
        }
        f2();
    }
    f1();

    // 闭包模式二:函数模式,函数A中有一个对象B

    function f3() {
        var num=10;
        var obj={
            age:num
        }
        console.log(obj.age);
    }
    f3();

闭包的作用:缓存数据,延长作用域
闭包的优缺点:缓存数据,而缓存数据回造成内存泄露,一般能不用就不用,使用沙箱。

沙箱
沙箱就是js中一块完全独立的区域,使用的都是自己独立的属性和方法
js中沙箱的基本格式------ js中 起始就是一个 自执行函数

(function () {

})();
沙箱的使用规范

  • 所有的变量定义 写在最上方
  • 中间放逻辑代码
  • 最后,如果需要就给外界暴露一些成员,如 window.num=num;

沙箱模式的优势

1.沙箱模式不会再外界暴露任何的全局变量,也就不会造成全局变量污染。

2.沙箱中的所有数据,都是和外界完全隔离的,外界无法对其进行修改,也就保证了代码的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值