还以为这是Native.js里面的内容,然后去官方文档中翻看了一下Njs的内容,并不是啊,然后去百度。...自执行函数 自执行函数(function(jquery){}(jquery)); * 相当于下面的代码: var fun = function(jquery){}; fun(jquery)...; * 立即执行匿名函数fun(jquery);主要是为了避免jquery与其他类库或变量有冲突。...mui的demo中(function($, doc) {}(mui, document));据说可以让函数在文档加载完毕之后再执行,相当于 $(document).ready(function (){...//函数体 });
匿名函数与自执行函数 匿名函数就是指的没有名字的函数,即定义函数对象时不定义函数体名字,但是必须将匿名函数作为表达式赋予一定操作,比如将其作为变量值或者让其自执行,否则这次定义将无意义,解释器也会抛出异常...自执行函数 自执行即函数定义与创建合用为一体,创建完成即调用 (function() { console.log(1); })(); // 1 包围函数的第一段括号返回一个匿名函数,随后第二个括号将其调用...这种方式可以缩小作用域,ES6之前JS仅有全局作用域与函数作用域,显然将所有变量交予全局作用域是不合适的,而定义函数再调用再销毁函数操作了三步,使用自执行匿名函数可以将上述三步操作定义后即完成。.../** * 自执行的一些方式 * 只要能够将匿名函数作为一个表达式出现,在后边加入()就能够将其自执行 */ // 这种经常用来构建沙箱模式 (function () { console.log...(1); }()); // 常用方式 传参操作 (function (i) { console.log(i); })(1); // 由于括弧()和JS的&&、异或、逗号等操作符在函数表达式和函数声明上是没有歧义的
学习闭包的基础知识: 函数声明 function fn(){ //这里是代码 }; fn(); //运行fn函数 与上面等价 var fn = function(){ //这里是代码 } fn(...); //运行 对fn()进行替换一下 (fn)()等价与fn() (function(){ //这里是代码 })() 测试: (function(){ var str= '自运行' alert...(str); //就可以运行了 })() alert(str); //不能访问str变量 这样作的好处尽可能的少用全局变量
立即执行函数 目录 立即执行函数 作用 参数 返回值 立即执行函数 立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行。...立即执行函数的组成 定义一个函数 将整个函数包裹在一对括号中 将函数声明转换为表达式 在结尾加上一对括号 让函数立即被执行 代码实例 (function () { console.log("...app") })() 作用 页面加载完成后只执行一次的设置函数。...将设置函数中的变量包裹在局部作用域中,不会泄露成全局变量。...注意 通常你不应该给立即执行函数传递太多的参数,因为它很快会成为一个负担——为了理解代码是如何工作的,你不得不经常上下滚动源代码。
格式: 格式一:(function(){})() 格式二:(funtion(){}()) 理解: 立即执行函数会将声明的函数表达式执行。...并且在多人的开发项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉。由于javascipt的自由性。...没有私有域的概念,这样写可以模仿一个私有作用于,用匿名函数作为一个容器,容器内部可以访问外部变量,而外部变量不能访问内部变量。俗称”匿名包裹器“或者“命名空间”。 ...并且在匿名函数容器中写函数然后通过赋值的方法,可以变向的到达java类的效果。将方法存进变量里,全局调用。...var rxr=r.control={}; var ff=22; rxr.ss=11; rxr.aa=function(){ console.log('执行
大家好,又见面了,我是你们的朋友全栈君。 js匿名函数和立即执行函数 1. 匿名函数 a)写法 b) 特点 2. 立即执行函数 a) 写法 b) 特点 c) 示例 1....var hello=function(){ console.log("hello"); }; hello();//hello b) 特点 匿名函数可以直接访问到外层署名函数(Foo)中的变量...(使用关键字var定义的),但不能访问外层署名函数的属性(使用关键字this定义的) 匿名函数既可以直接访问外层匿名函数中的变量,也可以直接访问外层匿名函数中的属性 外层函数类型: 署名函数 匿名函数...立即执行函数 该类函数没有声明,直接执行,执行完立即释放。一般做初始化比较合适。...,如function (){}(),这样不行,因为function (){}是声明不是表达式,如果是var fn=function (){}();就可以 但执行后,函数名或者变量就不代表函数了,被执行符号执行的表达式其函数名字将被忽略
“歪瓜裂枣”的自执行函数 除了上面()小括弧可以把function关键字作为函数声明的含义转换成函数表达式外,JavaScript的&& 与操作、||或操作、,逗号等操作符也有这个效果。...(个人依旧喜欢第二种i3方式) 四、自执行函数的应用 1. for循环 + setTimeout 例子 直接来看一个例子。...但因遇到了自执行函数,当时的i值已经被 lockedIndex锁住了。也可以理解为 自执行函数属于for循环一部分,每次遍历i,自执行函数也会立即执行。...以下是截取该参考博文的例子: // 自执行函数。自己调用自己(递归) function foo() { foo(); } // 自执行的匿名函数。...var foo = function () { arguments.callee(); }; // 立即执行匿名函数。但我们习惯称其为:自执行的匿名函数。
js函数执行过程的探究 说明 函数的执行过程分为两个阶段,第一阶段是创建执行上下文环境的阶段,第二阶段是代码执行的阶段。...1、创建执行上下文环境 创建变量对象,建立作用域链,确定当前上下文环境中寻找变量的规则,确定this对象的指向 2、代码执行阶段 执行函数体内的代码,在此阶段完成变量值、函数引用和其他代码。...在进入执行阶段之前,变量对象的属性还不能访问。但是,进入执行阶段后,变量对象的制作成为活动对象,可以访问其属性,开始执行阶段的操作。变量对象和活动对象的唯一区别就是处于执行上下文的不同生命周期。...以上就是js函数执行过程的探究,希望对大家有所帮助。更多js学习指路:js教程 推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。
ES6出现了一个可以替代自执行函数的东西。 拿实例说话 就算没仔细看过jquery源码,想比你也见过开头的这种代码: 这是一种典型的自执行函数,也就是立即执行函数。...这种函数是在JavaScript 的变量作用域影响下出现的。...先来比较一下下面两段代码: 1.1 自执行函数 var v = "hello"; (function(){ console.log(v); var v = "world"; })(); 输出:...如果说没有使用自执行函数,结果是这样的: 1 var deletedIds = []; 你在代码中已经定义过deletedIds,jquery中再定义一个,是不是把你的覆盖掉? 2....不能,得先执行jquery()方法才能调用(selector)。 3. 加一个自执行函数 什么是自执行函数,只要加载该文件,它就会自执行函数。
一、主动执行函数。...众所周知,函数一般有下面几种表现方式:第一种:函数声明function demo_one(){console.log(“this is demo-one”);}第二种:函数表达式var demo=function...,简单的叫做函数体,现在还不是函数表达式。...console.log(this.name);//输出 maomin}main();这里的main函数称为主动执行函数,什么叫主动执行函数呢?就是立即执行的函数啊。...显然,最初声明的函数体如果没有下面的mian(),就不能执行,这里的main()叫做函数调用,先声明后调用。
onClick中的函数自动被调用问题 来看如下两种html片段 // 每次加载都会执行一次 合同 // 正常执行 this.clickCon}>合同 原因 第一种写法是每次加载时,先调用...clickCon方法,然后将执行结果赋给onclick,每次都会执行 后面一种是将clickCon方法传递给onclick,所以只有触发click才会执行 解决方法 使用匿名函数 // 正常执行 <a
我们经常需要统计一个函数的执行耗时来判断函数的性能或者用于其他用途。JS 函数统计耗时主要有如下几种办法。...console.time()和console.timeEnd()方法均使用一个参数表示计数器的名称,参数值可以是任何字符串,但是这两个方法所使用的参数字符串必须相同,才能正确地统计出开始时间与结束时间之间所经过的毫秒数...performance 是一个全局对象,提供了获取性能相关的信息的方法。performance.now()返回进程启动至当前逝去的毫秒数,其中 0 表示当前进程的开始。...function var end = performance.now(); console.log('cost is', `${end - start}ms`) ---- 参考文献 [1] 博客园.在JS...中统计函数执行次数与执行时间 [2] Node.js.Performance [3] Node.js.Console
假如想统计JS中的函数执行次数最多的是哪个,执行时间最长的是哪个,该怎么做呢? 1. 统计函数执行次数 2. 统计函数执行时间 3. 如何控制函数的调用次数 4....如何控制函数的执行时间 一、统计函数执行次数 常规的方法可以使用 console.log 输出来肉眼计算有多少个输出 不过在Chrome中内置了一个 console.count 方法,可以统计一个字符串输出的次数...我们可以利用这个来间接地统计函数的执行次数 function someFunction() { console.count('some 已经执行'); } function otherFunction...不带参数则为 default 值,否则将会输出该字符串的执行次数,观测起来还是挺方便的 当然,除了输出次数之外,还想获取一个纯粹的次数值,可以用装饰器将函数包装一下,内部使用对象存储调用次数即可 var...因为JS是单线程的,控制函数的执行时间相对来说挺麻烦 通过 async await yield 等异步特性,也许还是能办到的 在React 16中的 Fiber 机制,在某种意义上是能控制函数的执行时机
以下代码执行的结果是什么?...JS 是单线程 JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。...这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。 2....于是,JS 中出现了同步任务和异步任务。 同步 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。...JS执行机制(事件循环) ? ? 4.
JS为什么是单线程的? JS最初被设计用在浏览器中,那么想象一下,如果浏览器中的JS是多线程的。...process1 删除了该dom,而process2 编辑了该dom,同时下达2个矛盾的命令,浏览器究竟该如何执行呢? 2 JS为什么需要异步?...如果JS中不存在异步,只能自上而下执行,如果上一行解析时间很长,那么下面的代码就会被阻塞。 对于用户而言,阻塞就意味着"卡死",这样就导致了很差的用户体验 3 JS单线程又是如何实现异步的呢? ...是通过的事件循环(event loop),理解了event loop机制,就理解了JS的执行机制。...setTimeout(function(){ console.log(2) },0) console.log(3) 运行结果是:1 3 2 也就是说,setTimeout里的函数并没有立即执行
JS执行机制 以下代码执行的结果是什么?...单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。...于是,JS 中出现了同步任务和异步任务。 同步 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。...比如做饭的异步做法,我们在烧水的同时,利用这10分钟,去切菜,炒菜。 他们的本质区别: 这条流水线上各个流程的执行顺序不同。 1.3 JS执行机制(事件循环) 1. 先执行执行栈中的同步任务。...异步任务(回调函数)放入任务队列中。 3. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任 务结束等待状态,进入执行栈,开始执行。
5次 a(), // 而times返回的匿名函数却被执行了5次 其中的差别相差非常远 a(), // 而times返回的匿名函数却被执行了5次 a()...// 而times返回的匿名函数却被执行了5次 ) // 0,1,2,3复制代码 深入写下去之前,先放出类似的代码 同样的执行,我把函数执行时间放到了前面,自增失败 const times = ((times...,此处 times, // 此处没有函数被执行 times, // 因此打印值为四个零 times ); // 0,0,0,0复制代码 同样的执行,我把闭包函数执行时间放到了后面,同样自增失败...,产生times变量,返回的函数再执行一次times引用次数为0 times()(), // 此处外部函数执行一次,产生times变量,返回的函数再执行一次 times()(), /.../ 此处外部函数执行一次,产生times变量,返回的函数再执行一次 times()() ); // 0,0,0,0复制代码 函数[1,2,3,4,4].entires()会返回一个迭代器,一下代码同样实现了类似自增
JS 是单线程 JavaScript语言的一大特点就是单线程,也就是说,同-个时间只能做一件事。...这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。 2....于是,JS 中出现了同步任务和异步任务。 同步 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。...同步任务指的是: 在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务; 异步任务指的是: 不进入主线程、而进入”任务队列”的任务,当主线程中的任务运行完了,才会从”任务队列...JS执行机制(事件循环) ? ? 由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop) .
javascript给人的直观感受是,从上往下执行,但实际上却不是这样的,先看个例子 1. console.log(test); 2. var test = "你好"; 3. console.log(...因为javascript执行时,在同一个作用域内是先编译再执行 编译的时候会编译 function 和 var 这两个关键词定义的变量,编译完成后从上往下执行并向变量赋值 所以执行第1行时, var test...已经执行过了,所以test不会报错,而test2就会报错 需要注意的是,对 var test 执行编译时,只是先定义了 test 这个变量,并不会把 "你好" 这个值赋给test,而是到第2行时才给test...赋值的,这就是为什么第1行的执行结果是 undefined 对于上面的例子,可以这样理解 //先编译 var 定义的变量 1. var test; //编译完成后,从上到下执行代码 2. console.log...//执行结果是"你好" function test() { console.log("你好"); } 模拟编译执行过程 //找到 function 定义的部分进行编译 //以函数名作为变量名,同时用函数赋值
} 造成这种现象是因为解析器在向执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码前可用;至于函数表达式,则必须等到解析器执行到它的所在的的代码行,才会真正的被解析。...h, 故会打印此结果 深入: JS声明函数的三种方式: 1.函数表达式: 即上面第一种方式, 这种方法使用function操作符创建函数, 表达式可以存储在变量或者对象属性里....//弹窗显示:5 3.自执行匿名函数 自执行函数,即定义和调用合为一体。...下面我们来看下一些比较有趣的自执行函数表达方式: // 下面2个括弧()都会立即执行 (function () { /* code */ } ()) // 推荐使用这个 (function ()...{ /* code */ })() // 但是这个也是可以用的 // 由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的 // 所以一旦解析器知道其中一个已经是表达式了
领取专属 10元无门槛券
手把手带您无忧上云