1.引子 相信很多初学js的人,都遇到这样一种情况:想要给一堆按钮添加各自的事件,比如点击第i个按钮时,弹出i这个值.理所当然地,我们会这样写: var buttons = document.getElementsByTagName("button"); //假设一共有8个按钮 for(var i = 0; i < buttons.length; i++) { buttons[i].onclick = function() { alert("我的index是"…
<ul> <li>男</li> <li>女</li> <li>老</li> <li>少</li> </ul> 使用js为多个未知数量的li循环添加事件的时候很容易想到如下代码 for( var i= 0,lis = document.getElementsByTagName("li"),len=lis.length; i<len;i++){ lis[i].onc…
JS闭包的理解及常见应用场景 一.总结 一句话总结: 闭包是指有权访问另一个函数作用域中的变量的函数 1.如何从外部读取函数内部的变量,为什么? 闭包:f2可以读取f1中的变量,只要把f2作为返回值,就可以在f1外读取f1内部变 原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束后,被垃圾回收机制回收. function f1(){ var n = 123; function f2(){ //f2是一个闭包 ale…
1.需求 给下面每个按钮增加事件 <ul id="list"> <li>按钮1</li> <li>按钮2</li> <li>按钮3</li> <li>按钮4</li> <li>按钮5</li> </ul> 本能的做法就是直接循环添加,如下 var list_obj = document.getElementsByTagName('li'); f…
  闭包算是前端面试的基础题,但我看了很多关于闭包的文章博客,但感觉很多对于闭包的理想还是有分歧的,现在网上对闭包的理解一般是两种: 有些文章认为闭包必须要返回嵌套函数中里面用到外面函数局部变量的方法才叫闭包,有两个条件:1).函数嵌套,内部函数要用到外部函数的局部变量 2).内部函数必须返回 有些文章认为只要函数嵌套内部函数用到了外部局部变量就是闭包,不要返回内部函数 我们先看看闭包的定义到底是什么,然后在来分析我在学习js的时候不同阶段对闭包的误解.在<javascript高级程序设计中>…
先看题目代码: 1 2 3 4 5 6 7 8 9 10 11 12 function fun(n,o) {  console.log(o)  return {   fun:function(m){    return fun(m,n);   }  }; } var a = fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,?,?,? var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,? var…
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li>香蕉</li> <li>苹果</li> <li>菠萝</li> <l…
HTML代码: <button type='button' class='btn' id='1'>按钮1</button> <button type='button' class='btn' id='2'>按钮1</button> <button type='button' class='btn' id='3'>按钮1</button> <button type='button' class='btn' id='4'>按钮…
js线程:javascript是单线程的,所有任务都需要排队,这些任务分为同步任务和异步任务,单线程上有一个主线程任务.同步任务必须再主线程上排队进行,而异步任务(类似于点击事件)必须在主线程上的任务全部进行完成后形成一个任务队列(将所有的触发事件放在一个任务队列中),这任务队列的任务也是需要排队的,当主线程任务完成后他们将通过触发事件按顺序加入到主线程进行任务.可以改变程序正常执行顺序的操作就可以看成是异步操作. ajax 异步解释:ajax异步就是当任务队列存在ajax请求时,当任务走到aj…
理解Js的闭包,首先让我们先看几个概念 执行环境(executive environment)每个函数都有自己的执行环境,匿名函数默认为全局环境. 作用域链(scope chain)子函数继承父函数,但是父函数不能引用子函数. 变量对象(variable object)分为全局变量对象,和局部变量对象,前者的生存在整个环境中,后者在生存在函数的执行环境下,就是说,执行函数时被创建,当函数执行完后被销毁. 怎么被销毁的啊?目前最常见的算法是当变量对象不再被引用时,便可回收内存. 但是,若是想在函数…