美文网首页
JS 自定义函数

JS 自定义函数

作者: 贪恋冬天的幸福 | 来源:发表于2019-11-01 14:41 被阅读0次

函数可以动态定义,也可以分配给变量。如果创建了一个新函数并且将其分配给保存了另外函数的同一个变量,那么就以一个新函数覆盖了旧函数。在某种程度上,回收了旧函数指针以指向一个新函数。而这一切发生在旧函数体的内部。在这种情况下,该函数以一个新的实现覆盖并重新定义了自身。这可能听起来比实际上更复杂,下面让我们看一下简单的例子:

let scareMe = function () {
  alert('Boo!')
  scareMe = function () {
    alert('Double boo!')
  }
}

//使用自定义函数
scareMe(); //输出Boo!
scareMe(); //输出Double boo!

当您的函数有一些初始化准备工作,并且仅需要执行一次,那么这种模式就非常有用。因为并没有任何理由去执行本可以避免的重复工作,即该函数的一些部分可能并不再需要。在这种情况下,自定义函数可以更新自身的实现。使用此模式可以显著地帮助您提升应用程序的性能,这是由于重新定义的函数仅执行了更少的工作。
注意:这种模式的另一个名称是"惰性函数定义"(lazy function definition)。因为函数直到第一次使用时才被正确地定义,并且其具有向后惰性,执行了更少的工作。
该模式的其中一个缺点在于,当它重定义自身时已经添加到原始函数的任何属性都会丢失。此外,如果该函数使用了不同的名称,比如分配给不同的变量或者以对象的方法来使用,那么重定义部分将永远不会发生,并且将会执行原始函数体
下面让我们来看一个例子,该例中scareMe()函数将以第一类对象(first-class object)使用的方式来使用:

  1. 添加一个新的属性
  2. 函数对象被分配给一个新的变量
  3. 该函数也以一个方法的形式使用
    考虑下面的代码片段:
//1. 添加一个新的属性
scareMe.property = 'properly';

//2. 赋值给另一个不同名称的变量
let prank = scareMe;

//3. 作为一个方法使用
let spooky = {
   boo: scareMe 
};

prank(); //输出Boo!
prank(); //输出Boo!
console.log(prank.property); //输出'properly'

spooky.boo(); //输出Boo!
spooky.boo(); //输出Boo!
console.log(spooky.boo.property); //输出'properly'

scareMe(); //输出Double boo!
scareMe(); //输出Double boo!
console.log(scareMe.property); //输出undefined

正如您所看到的,当将该函数分配给一个新的变量时,如预期的那样,函数的自定义(self-definition)并没有发生。每次当调用prank()时,它都通知'Boo!'消息,同时它还覆盖了全局scareMe()函数,但是prank()自身保持了可见旧函数,其中还包括属性。当该函数以spooky对象的boo()方法使用时,也发生了同样的情况。所有这些调用不断地重写全局scareMe()指针,以至于当它最终被调用时,它才第一次具有更新函数主体并通知'Double boo!'消息的权利。此外,它也不能访问scareMe.property属性。

参考资料:《JavaScript 模式》 Stoyan Stefanov 著 陈新 译

相关文章

  • 美美的小程序开发之路--20190405

    JS函数 为完成某一功能的程序指令(语句)的集合,称为函数。 函数分为自定义函数和系统函数,自定义函数就是指程序员...

  • 2018-06-12

    js中浮点型运算 方法一:有js自定义函数 //加法函数,用来得到精确的加法结果 //说明:javascript的...

  • VUE 全局函数的定义与使用

    方 法 一 : 方 法 二 : 创建 自定义函数模块 myFun.js 在 main.js 中导入自定义模块 使...

  • 微信小程序 用Promise封装wx.request(),简化代

    在app.js中 添加自定义post方法 其他页面调用app.js的 post()函数

  • [react]21、react-redux

    1、redux文件结构拆分 2、自定义connect函数 2.1、connect.js connect.js文件依...

  • 2021-03-18

    js 解析:fn(10):当执行到自执行函数时,直接返回一个函数,自定义函数的this指的是全局window,所以...

  • JS对象和继承

    JS 对象创建的三种方式 字面量创建方式 系统内置构造函数方式 自定义构造函数 继承方式 for in 继承 原型...

  • NuLink月报 2021-12

    技术进展 修改Nuproxy和Pallet协议函数 构建自定义链规范 增加单元测试和函数测试样本 增加JS测试案例...

  • JS 自定义函数

    函数可以动态定义,也可以分配给变量。如果创建了一个新函数并且将其分配给保存了另外函数的同一个变量,那么就以一个新函...

  • 自定义函数实现屏蔽鼠标和键盘相关事件

    1.编写自定义的js函数maskingKeyboard(),在该函数中屏蔽键盘的回车键、退格键、F5键、Ctrl+...

网友评论

      本文标题:JS 自定义函数

      本文链接:https://www.haomeiwen.com/subject/lfmfbctx.html