js学习之函数表达式及闭包】的更多相关文章

来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(七) 直接切入主题~ 定义函数的方式有两种: 函数声明 function functionName(arg0,arg1,arg2) { //函数体 } 函数声明有一个重要的特征——函数声明提升,意思是在执行代码之前会先读取函数声明,允许把函数声明放在调用它的语句后面 sayHi(); function sayHi() { alert("hi"); } 函数表达式 var fu…
函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表达式不需要,没有名字的叫匿名函数 2.在无法确定如何引用函数的情况下,递归函数就会变得比较复杂 3.递归函数应该始终使用arguments.callee来递归调用自身,不要使用函数名----函数名可能会发生变化 当函数内部定义了其他函数时,就创建了闭包.闭包有权访问包含函数的作用域和全局作用域,原理…
一.介绍 本次博客主要介绍函数表达式的内容,主要是闭包. 二.函数表达式 定义函数的两种方式:一个是函数声明,另一个就是函数表达式. //1.函数声明写法 function fn2(){ console.log('函数声明'); } //2.函数表达式写法 var fn1 = function(){ console.log('函数表达式'); } 区别: 1.函数声明是用function后面有函数名,函数表达式是赋值形式给一个变量. 2.函数声明可以提升函数,而函数表达式不会提升 函数提升就是函…
作为一名js初学者,与大家分享下.Javascript中有函数声明提升的功能,会优先编译函数声明部分.比如, ff(); function ff(){ alert("hello world."); } 这样的代码一样会执行. 下面谈谈函数声明和函数表达式的区别,直接看实例: 1.使用函数声明的情况 <script type="text/javascript"> //使用函数声明的情况 //IE,Chrome下返回no, Firefox下返回yes ; i…
原文为 http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife ------------------------ES6拓展篇 ----------ES6  let实际上为 JavaScript 新增了块级作用域. ----------块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了. // IIFE 写法 (function () { var tmp = ...…
关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之间会读取函数声明,意思是在执行代码之前会先读取函数声明.这就意味着可以把函数声明放在调用它的语句 后面. sayHi(); function sayHi(){ alert("Hi!"); } 理解函数提升的关键,就是理解函数声明与函数表达式之间的区别. //不要这样做 if(condition){ function sayHi(){ alert("HI!"); } }else{ function sa…
// 下面2个括弧()都会立即执行 (function () { /* code */ } ()); // 推荐使用这个(function () { /* code */ })(); // 但是这个也是可以用的 和普通function执行的时候传参数一样,自执行的函数表达式也可以这么传参,因为闭包直接可以引用传入的这些参数,利用这些被lock住的传入参数,自执行函数表达式可以有效地保存状态. // 这个代码是错误的,因为变量i从来就没背locked住// 相反,当循环执行以后,我们在点击的时候i…
前文已经简单的介绍了函数的闭包.函数的闭包就是有权访问另一个函数作用域的函数,也就是函数内部又定义了一个函数. var Super=function(num){ var count=num; return function(){ console.log(count); } } var result=Super(3);//此时result是一个函数 result();//输出3 上面的代码定义了一个函数Super,同时在Super函数内部又定义了一个匿名函数作为返回值.第七行调用Super函数,此…
概述 函数的声明 JavaScript 有三种声明函数的方法 function 命令 function命令声明的代码区块,就是一个函数.function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数.函数体放在大括号里面. 这叫做函数的声明(Function Declaration). function print(s) { console.log(s); } 函数表达式 除了用function命令声明函数,还可以采用变量赋值的写法. var print = function(s…
函数表达式和函数声明的区别.实际上,解析器在向执行环境中加载数据是,对函数表达式和函数声明并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用.而函数表达式,则必须等到解析器执行到它所在的代码行,才会真正的被解释执行. 请看下边的例子. 函数表达式:在执行期间,会报错. //函数表达式 alert(num_fun()); var num_fun = function(){ return 3; } 函数声明:可以正常运行. alert(num()); //函数声明 function…