js闭包使用详解

这次给大家带来js闭包使用详解,js闭包使用的注意事项有哪些,下面就是实战案例,一起来看一下。

closure is the combination of a function and the lexical environment within which that function was declared.

闭包是一个函数和其内部公开变量的环境的集合.

简单而言, 闭包 = 函数 + 环境

第一个闭包的例子

function init() { var name = 'Mozilla'; // name is a local variable created by init function displayName() { // displayName() is the inner function, a closure alert(name); // use variable declared in the parent function  } displayName(); }init();because inner functions have access to the variables of outer functions, displayName() can access the variable name declared in the parent function, init().

登录后复制

其实这个栗子很简单,displayName()就是init()内部的闭包函数,而为啥在displayName内部可以调用到外部定义的变量 name 呢,因为js内部函数有获取外部函数中变量的权限。

第二个例子

var data = [ {'key':0}, {'key':1}, {'key':2}];function showKey() { for(var i=0;i<data.length;i++) {   setTimeout(function(){    //console.log(i); //发现i输出了3次3   //console.log(this); // 发现 this 指向的是 Window   data[i].key = data[i].key + 10;   console.log(data[i].key)   }, 1000); }}showKey();

登录后复制

上面这个例子可以正确输出 10 11 12 吗?

答案是:并不能,并且还会报语法错误….

console.log(i); 发现i输出了3次3,也就是说,在setTimeout 1000毫秒之后,执行闭包函数的时候,for循环已经执行结束了,i是固定值,并没有实现我们期望的效果。

console.log(this); 发现 this 指向的是 Window,也就是说,在函数内部实现的闭包函数已经被转变成了全局函数,存储到了内存中。

所以需要再定义一个执行函数

var data = [ {'key':0}, {'key':1}, {'key':2}];function showKey() { var f1 = function(n){  data[i].key = data[i].key + 10;  console.log(data[i].key) } for(var i=0;i<data.length;i++) {   setTimeout(f1(i), 1000); }}showKey();// 得到预期的 10 11 12

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

Vue自定义动态组件使用详解

js使用分时函数步骤详解

以上就是js闭包使用详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2766486.html

(0)
上一篇 2025年3月8日 11:14:53
下一篇 2025年2月19日 06:40:48

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • json-server实现后端数据模拟

    这次给大家带来json-server实现后端数据模拟,json-server实现后端数据模拟的注意事项有哪些,下面就是实战案例,一起来看一下。 正开发过程中 前后端分离或者不分离 ,接口多半是之后与页面的开发 ,所以建立rest的APL的接…

    编程技术 2025年3月8日
    200
  • js实现复制文本文件功能(步奏详解)

    这次给大家带来js实现复制文本文件功能(步奏详解),js实现复制文本文件功能的注意事项有哪些,下面就是实战案例,一起来看一下。 最近遇到一个需求,需要点击按钮,复制 标签中的文本到剪切板 之前做过复制输入框的内容,原以为差不多,结果发现根本…

    2025年3月8日
    200
  • vue常用组件使用详解

    这次给大家带来vue常用组件使用详解,vue常用组件使用的注意事项有哪些,下面就是实战案例,一起来看一下。 项目技术: webpack + vue + element + axois (vue-resource) + less-loader…

    编程技术 2025年3月8日
    200
  • vuex使用详解

    这次给大家带来vuex使用详解,vuex使用的注意事项有哪些,下面就是实战案例,一起来看一下。 1、 npm install vuex 2、 在src 下 新建文件夹 store (为什么是这个单词,vuex 是用来状态管理的,用储存一些组…

    2025年3月8日 编程技术
    200
  • js捆绑TypeScript声明使用详解

    这次给大家带来js捆绑TypeScript声明使用详解,js捆绑TypeScript声明的注意事项有哪些,下面就是实战案例,一起来看一下。 前话 TypeScript是注意事项类型的超集,这是TypeScript的文档介绍的一句话,那么他们…

    2025年3月8日
    200
  • d.ts文件使用详解

    这次给大家带来d.ts文件使用详解,使用d.ts文件的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 本文主要讲怎么写一个typescript的描述文件(以d.ts结尾的文件名,比如xxx.d.ts)。 最近开始从js转ts了。但是…

    2025年3月8日 编程技术
    200
  • vue render开发实例详解

    这次给大家带来vue render开发实例详解,vue render开发的注意事项有哪些,下面就是实战案例,一起来看一下。 简介 在使用Vue进行开发的时候,大多数情况下都是使用template进行开发,使用template简单、方便、快捷…

    编程技术 2025年3月8日
    200
  • JS实现文本字体打印界面

    这次给大家带来JS实现文本字体打印界面,JS实现文本字体打印界面的注意事项有哪些,下面就是实战案例,一起来看一下。 具体代码如下: 打字效果 登录后复制 p { width:980px; margin:10px auto; backgrou…

    编程技术 2025年3月8日
    200
  • Koa项目搭建步骤详解

    这次给大家带来Koa项目搭建步骤详解,Koa项目搭建的注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了Koa项目搭建过程详细记录,分享给大家,具体如下: Java中的Spring MVC加MyBatis基本上已成为Java We…

    2025年3月8日
    200
  • 编写d.ts文件步骤详解

    这次给大家带来编写d.ts文件步骤详解,编写d.ts文件的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 本文主要讲怎么写一个typescript的描述文件(以d.ts结尾的文件名,比如xxx.d.ts)。 最近开始从js转ts了。…

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论