首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript之闭包问题以及立即执行函数

https://blog.csdn.net/sinat_35512245/article/details/53514804 今天我将会来浅谈一下关于JavaScript的立即执行函数以及闭包问题...首先我们先要了解一下关于立即执行函数: ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数...,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此。...要理解立即执行函数,需要先理解一些函数的基本概念。...,函数调用必须在函数表达式之后 ---- 在理解了一些函数基本概念后,回头看看( function(){…} )()和( function (){…} () )这两种立即执行函数的写法,最初我以为是一个括号包裹匿名函数

96320

JS立即执行函数的学习

格式: 格式一:(function(){})() 格式二:(funtion(){}()) 理解:   立即执行函数会将声明的函数表达式执行。...并且在多人的开发项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉。由于javascipt的自由性。...没有私有域的概念,这样写可以模仿一个私有作用于,用匿名函数作为一个容器,容器内部可以访问外部变量,而外部变量不能访问内部变量。俗称”匿名包裹器“或者“命名空间”。   ...并且在匿名函数容器中写函数然后通过赋值的方法,可以变向的到达java类的效果。将方法存进变量里,全局调用。...var rxr=r.control={}; var ff=22; rxr.ss=11; rxr.aa=function(){ console.log('执行

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript立即执行函数(IIFE)的使用

    js的立即执行函数(IIFE)有两种写法,分别为:(function ( ){})( ) 与 (function ( ){}( )) ,这两种写法基本上是没有区别的。 那么为什么要 IIFE?...1.传统的方法啰嗦,定义和执行分开写; 2.传统的方法直接污染全局命名空间(浏览器里的 global 对象,如 window) 函数范围与块范围界定 使用var关键字声明的局部变量的作用域为封闭函数。...foo; // ReferenceError: foo is not defined 但是,块范围变量不能替代立即调用的函数表达式。...闭包和私人数据 IIFE的另一个用例是围绕由IIFE返回的函数访问的局部变量提供包装范围。通过这种方式,即使函数在IIFE的词法范围外执行,也会创建一个闭包,使函数能够访问局部变量。...为了解决命名冲突问题,可以将一段代码封装在一个IIEF中,将一个全局变量(比如,jQuery)作为参数传入IIFE。

    2.4K20

    JavaScript立即执行函数的解释分析(4)—总结篇

    说明 这次来对立即执行函数 Immediately-Invoked Function Expression (IIFE) ,做最后的总结,会把前面几篇提到的内容做一个整合,这样立即执行函数就算是说完了...作用 立即执行函数,可以避免全局变量的污染 ?...定义一个全局变量a,第一次能打印出来,第二次也能打印出来,用立即执行函数的写法,在函数中也定义一个变量a,函数执行了,打印了a,然后再次打印 a 的时候,打印出的是全局变量的a,立即执行函数中的变量a已经没有了...(函数执行后,函数中的变量如果没有被继续引用,就会被释放),而全局变量a,还是存在的,所以,立即执行函数可以避免全局变量的污染 , 也防止产生冲突。...当函数只需要执行一次的时候,我们选择立即执行函数的方式也是很好的。 总结 立即执行函数,相信大家应该明白了,到此算是把立即执行函数说完了,如果文中有什么问题,也非常欢迎大家指正。

    52810

    前端开发:立即执行函数(function(){}())与(function(){})()的区别

    前言在前端开发过程中,JS中的原理使用知识点是老生常谈,但是有时候在开发中会忽略一些细节和不经意的知识点,尤其是刚入行的新晋开发者更是一知半解,在对JS整体使用的时候会有所遗漏。...什么是立即执行函数声明一个函数,然后立即调用该函数,这时候的该函数就是一个立即执行函数,换句话说就是声明函数以后立即执行该函数就叫做立即执行函数,即IIFE (Immediately Invoked Function...JS引擎把function解析为一个表达式,所以小括号包裹为的就是解决这个问题的。...在立即执行函数内部使用的形参就是传递到函数内部的外部变量,进入立即执行函数自己的作用域,且不受外部变量的影响。...(function(){}())与(function(){})()的区别通过上面关于立即执行函数的介绍,(function(){}())与(function(){})()的区别这个问题,是从不同角度来看的

    8921

    JavaScript立即执行函数的解释分析(3)—谈谈圆括号()

    说明 前两篇文章,我们似乎已经明白为什么,立即执行函数要那样写了,这次为了能更加深入理解,我们来说说圆括号的事。...x function a(x){ console.log(x); } //函数调用 传递实参 2 a(2); 3、调用函数或者方法 函数声明的时候是不执行的,如果需要执行就要用到圆括号,来调用它...花括号中的代码 console.log(a); } 循环(loop)语句 //限定a执行 花括号中的代码 for(var a=0;a<4;a++){ console.log...console.log(1); }(); //()前面是函数声明 所以会报错 (function a(){ console.log(1); })(); //()前面是函数表达式 所以会立即执行...总结 这篇文章主要在说圆括号,也是为了能让大家更加理解立即执行函数,下一篇会对立即执行函数进行最后的总结。

    80030

    浅谈自执行函数(立即调用的函数表达式)

    正儿八经的自执行函数 想要解决上面问题,可以采用小括弧将要执行的代码包含住(方式一),如下: // 方式一 (function fun4(){ console.log("fun4...但因遇到了自执行函数,当时的i值已经被 lockedIndex锁住了。也可以理解为 自执行函数属于for循环一部分,每次遍历i,自执行函数也会立即执行。...所以尽管有延时器,但依旧会保留住立即执行时的i值。 上面的分析有点模糊和牵强,也可以从 闭包 角度出发分析的。但鄙人“闭包”概念模糊,先遗憾下,以后再补充分析了。...在点击元素触发事件时,巧用 this 关键字去取出当前点击对象的属性 index,也就是对应的索引。 四、自执行与立即执行 最后来唠嗑下命名方式。...个人愚见:上面例子中把 自执行 解释成 “自己调用自己”,当然和 立即执行 相差很大了。但如果把 自执行 解释成 “自动执行”,就和 立即执行 异曲同工了。

    3.6K30

    立即执行函数在前端国际化方案中的应用

    下面我们来看看其中涉及到的一个重要知识点:立即执行函数。 ---- 什么是立即执行函数? 首先,它是一个匿名函数; 其次,它在声明后会被立即执行; 最后,使用圆括号加以调用。...在本文的国际化例子中,我们在方法体中 return 了语言包 object,并不关心函数的返回值,所以可以随意使用任意写法: 那么问题来了,立即执行函数有啥用武之地?...立即执行函数的几大作用 使用匿名函数,无需为函数命名,避免污染全局变量 它的内部形成了一个单独的作用域,可以封装外部无法读取的私有变量 第一点很好理解,我们看看第二点在说什么。...所以我们完全可以让立即函数返回一个函数​,​举个例子: 看一下执行结果,就很好理解了: 所以,你可以尽情把高阶函数的能力带到立即执行函数中​。...一句话总结:立即执行函数的作用域封闭能力可以很优雅地实现一些现实业务诉求​,还可以结合高阶函数实现更为复杂的功能,希望大家都能灵活掌握并运用​。

    40920

    代码执行过程中JVM栈区域的使用

    栈帧: 一个栈中可以有多个栈帧, 栈帧是随着方法的调用而创建, 随着方法的结束而销毁. 栈帧的主要组成部分: 1. 局部变量表: 存储方法参数和局部变量的存储空间. 2....操作数栈: 方法执行过程中, 通过字节码push/pop操作, 进行算术运算或者是调用其他方法等操作....字节命令执行 根据LineNumberTable,可知每行代码分别对应了哪些字节命令; 根据这些字节命令,就能知道一行代码在执行过程中是如何利用栈帧中的不同空间进行运算执行的了; 程序计数器也是根据LineNumberTable...,知道当前线程执行到了哪行代码....栈 每个方法调用时都会创建1个栈帧 Main()方法在调用add()方法时,栈内结构大致如下: 通过add()方法的执行过程,可以清晰的说明字节命令是如何利用栈执行代码的.

    32220

    JavaScript立即执行函数的解释分析(1)—表达式与语句的区别

    说明 我们应该经常看到这两种写法 (function(){ })() (function(){ }()) 也许你知道,这是立即执行函数,但为什么这样能立即执行呢?...o.x; // => 1: o的x属性 o["x"]; // => 1: o的x属性 a[0].x; // => 1: a[0]的x属性 调用表达式 调用表达式是一种调用(或者执行...,不会执行任何动作,当创建一个具有空循环体的循环时,空语句很有用。...循环(loop)语句 可以重复执行语句,如while和for语句。 跳转(jump)语句 可以让解释器转至程序的其他部分继续执行,如break、return、和throw语句。...总结 表达式计算一个值,但语句用来执行以使某件事发生。 它们并不是完全没有关系的两个东西,看图。 ?

    70240

    SpringBoot中CommandLineRunner的作用,也就是项目启动之后就立即执行的操作

    SpringBoot中CommandLineRunner的作用 平常开发中有可能需要实现在项目启动后执行的功能,SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner...接口,实现功能的代码放在实现的run方法中 也就是项目一启动之后,就立即需要执行的动作 我们只需要在项目里面简单的配置,就可以实现这个功能。...run方法,如果需要按照一定的顺序去执行,那么就需要在实体类上使用一个@Order注解(或者实现Order接口)来表明顺序 package org.springboot.sample.runner;...1"); } } 控制台显示 执行1 执行2 根据控制台结果可判断,@Order 注解的执行优先级是按value值从小到大顺序。...@Order 作用 就是项目启动之后,要执行的动作是比较的多,那么到底先执行哪个,那么就可以利用这个注解限定优先级。

    11K40

    作为项目管理者如何避免项目的延期与执行过程中的加班问题

    项目的不能够如期完成直接导致的是用户或者甲方对公司信誉、能力等各个方面的怀疑与否定,项目实施过程中的无休无止的加班导致的则是员工上班积极性、员工思维等哥哥方面的问题。...1、计划不清 作为一个项目的管理者,项目执行时最怕的就是对该项目没有一个较好的规划。...首先,在项目进行前,先和产品经理、领导、客户等相关人员沟通好,确定好项目实施过程中的轻重缓急,然后用“思维导图”或者类似的工具队项目的计划做一张计划图;其次,作为管理者,不可独断专行,有些问题或者技术上的问题当团队的大部分人员统一是...也要要求他们提前提出;再次,就项目遇到的问题,不要将问题留到最后。...3、沟通不畅 这个沟通指的是团队之间的,团队之间的沟通不畅也是造成类似问题的重要原因,所以,首先,建议建立内部沟通网络,QQ讨论群,飞秋,或者类似的东西,有啥问题,提出来,大家及时沟通,及时解决;其次,

    80641

    内测过程中Shader出现的问题

    由于我之前其实没有太多Shader的编写经验,这次上线之后暴露了不少实践性问题。 首先遇到的就是精度问题。 在地表渲染过程中, 如果碰到下雨天,我们会在地面湿滑到一定程度之后生成涟漪。...这也给我提了一个醒,当我们的Shader需要长时间运行时,一定要注意_Time.y过大之后,在运算过程中会精度丢失的问题。...在问题排查过程中,我一度怀疑是精度问题。因此不停地在图片格式上做文章。直到最后我才发现我犯了一些常识性错误。...图片文件中,实际存储的颜色值是0~255的整型,而不是0~1的浮点型,也就是说单通道精度最高也只能到1/255。 而我们实际使用过程中n的值只是0~45,远低于1/255,不可能是图片精度问题。...定位到了问题,修复自然就是一件很简单的事。

    1K20

    模块化、闭包与立即执行函数的使用、MVC里的V和C

    模块化、MVC里的V和C、闭包与立即执行函数的使用 这篇文章记录我写在线个人简历过程中学习的知识 完整代码(暂未完成) 预览地址 轮播Swiper组件的使用 英文官网 中文网--Swiper4.x使用方法...立即执行函数的使用 将js分成不同的几个模块后,然后使用文件引入,但是会出现问题:如果使用var 声明变量,那么就会成为全局变量,这样容易覆盖. 在ES6之前,只有函数里面才有局部变量....所以如果想用局部变量,解决方法是把它放到一个函数中,然后立即执行,这样这个函数内部的变量就是局部变量.也不会被相同名字的全局变量覆盖. ?...,都使用立即执行函数!...accessor得到一个GrowUp函数 //growUp现在是一个全局变量了 growUp(); 实际growUp()就相当于立即执行了,因为我声明了一个函数,而且立即执行了 这就是闭包 MVC的V和

    1.1K10

    常见Code Review过程中发现的问题

    软件环境:Spring MVC + MyBatis 主要体现在两个方面,一个是编码习惯问题,另一个是编码质量的问题。...编码习惯主要有日志编写、代码注释以及编码风格的问题,而编码质量则与很多方面相关,比如轮子的使用、数据交互、逻辑精简程度等等。...编码质量问题: 重复造轮子的问题,常见工具类使用不到位,经常自己写方法实现。比如Apache commons,Google Guava等。...【涉及NDB Cluster存储引擎,跨库Join问题】 代码命名,未能见名知意,这也是一个老生常谈的问题,起个优雅的名字是多么的重要。...需要异步处理的情况就不要同步处理,以免影响主业务流程效率。比如流程过程中产生的短信、推送通知等,以通知为主要目的的除外。 代码重复,针对功能类似的方法,可添加一个参数加以区分复用。

    22520
    领券