美文网首页
JavaScript闭包汇总

JavaScript闭包汇总

作者: 六寸光阴丶 | 来源:发表于2020-06-23 19:39 被阅读0次

1. 手写一个once函数

要求

第一次调用结果为函数返回值,后续调用的结果为第一次的返回值。

源代码

let once = function (fun) {
  let status = true
  let result = undefined
  return function () {
    if (status) {
      status = false
      result = fun(...arguments)
    }
    return result
  }
}

测试

let fn1 = function () {
  return Math.random()
}
let fn2 = once(fn1)
let res1 = fn2()
console.log(res1)
let res2 = fn2()
console.log(res2)

测试结果

0.7698273333982397
0.7698273333982397
0.7698273333982397
0.7698273333982397

2. 手写一个计数器

要求

函数每调用一次,计数器值加1

源代码

let count = (function () {
  let counter = 0
  return function () {
    return (++counter)
  }
})()

测试

console.log(count())
console.log(count())
console.log(count())
console.log(count())

测试结果

1
2
3
4

3. JS函数重载

要求

根据参数的不同进行不同的逻辑

源代码

let addMethods = (object, name, fun) => {
  const old = object[name]
  object[name] = function () {
    if (fun.length === arguments.length) {
      return fun.apply(this, arguments)
    } else if (typeof old === 'function') {
      return old.apply(this, arguments)
    }
  }
}

let obj = {}

addMethods(obj, 'fun', function (params) {
  console.log(params)
})

addMethods(obj, 'fun', function (params1, params2) {
  console.log(params1, params2)
})

addMethods(obj, 'fun', function (params1, params2, params3) {
  console.log(params1, params2, params3)
})

测试

obj.fun(1)
obj.fun(1, 2)
obj.fun(1, 2, 3)
obj.fun(1)
obj.fun(1, 2)
obj.fun(1, 2, 3)

测试结果

1
1 2
1 2 3
1
1 2
1 2 3

相关文章

  • JavaScript闭包汇总

    1. 手写一个once函数 要求 第一次调用结果为函数返回值,后续调用的结果为第一次的返回值。 源代码 测试 测试...

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • javascript中闭包是什么

    javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。闭包就...

  • Javascript 闭包

    闭包 (注:所以案例以 javascript 实现) 初识闭包 什么是闭包 MDNClosures are fun...

  • 作用域闭包

    概览 背景知识:JavaScript内存管理、JavaScript作用域。 内容 1 闭包定义 闭包:当函数可以记...

  • JavaScript 作用域

    概览 背景知识:JavaScript内存管理、JavaScript作用域。 内容 1 闭包定义 闭包:当函数可以记...

  • 20170815 前端开发日报

    JavaScript闭包,只学这篇就够了 闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭...

  • JavaScript深入理解-闭包(Closure)

    推荐文章:学习Javascript闭包(Closure)- 阮一峰javascript深入理解-从作用域链理解闭包...

  • 闭包

    学习Javascript闭包(Closure)

网友评论

      本文标题:JavaScript闭包汇总

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