JS高程7.函数表达式(1)

定义函数的两种常见的方法:

1 . 函数声明

2. 函数表达式

# 差异

(1)函数声明 ,具有函数声明提升的特征。

(2)函数声明的函数的name属性为函数的名称;使用函数表达式定义的函数在ES5中,name属性为空字符串,在ES6中为函数的名称。

 #  函数声明提升

  函数声明

1 sayHello();//在函数声明之前调用函数不会报错,因为函数声明提升。
2 function sayHello(){
3     console.log("Hello!");//Hello!
4     console.log(sayHello.name);//sayHello
5 }

  函数表达式

1 sayHello();// TypeError: sayHello is not a function  使用函数表达式的方法定义函数,在变量声明函数之前调用函数会报错。
2 var sayHello = function (){
3     console.log("Hello!");//Hello!
4     console.log(sayHello.name);//sayHello。注意:在ES5中,匿名函数的name属性是空字符串(P176),在ES6中返回这个具名函数原本的名字。
5 }
6 sayHello();//在这里调用不会报错。  

# 注意以下这种情况

 1 //不要这样做。由于函数声明提升的原因,以下代码在ECMAScript中属于无效语法,浏览器尝试修正的错误的做法不一致。P176
 2  var flag = true;
 3  if(flag){
 4      function sayHi(){
 5          console.log("Hi");
 6      }
 7  }else{
 8      function sayHi(){
 9          console.log("Yo");
10      }
11  }
12  sayHi();//严格模式下会报错。 ReferenceError: sayHi is not defined
 1 //可以这样做,使用函数表达式。
 2  var flag = true;
 3  var sayHi;
 4  if(flag){
 5      sayHi = function(){
 6          console.log("Hi");
 7      }
 8  }else{
 9      sayHi = function(){
10          console.log("Yo");
11      }
12  }
13  sayHi();
时间: 2024-11-16 20:03:33

JS高程7.函数表达式(1)的相关文章

js自执行函数表达式

// 下面2个括弧()都会立即执行 (function () { /* code */ } ()); // 推荐使用这个(function () { /* code */ })(); // 但是这个也是可以用的 和普通function执行的时候传参数一样,自执行的函数表达式也可以这么传参,因为闭包直接可以引用传入的这些参数,利用这些被lock住的传入参数,自执行函数表达式可以有效地保存状态. // 这个代码是错误的,因为变量i从来就没背locked住// 相反,当循环执行以后,我们在点击的时候i

JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》

函数表达式的特征 使用函数实现递归 使用闭包定义私有变量 前面我们说到定义函数有两种方式:函数声明.函数表达式. 两者的区别在于函数声明提升,前者在执行之前的上下文环境中直接被赋值,而后者不会. 一.递归 递归函数是一个函数通过名字调用自身的情况下构成的. function factorial(num){ if(num<1){ return 1; }else{ return num * arguments.callee(num-1); } } alert(factorial(10)); 二.闭包

js中的函数应用

js中的函数应用 什么是函数,函数的概念 函数就像一个黑匣子,里面的东西你都不知道,但是你提供一些材料放进去,他可以制造出你需要的东西; 可以让多个一样的功能封装组合起来,然后想执行几次就执行几次 函数就是另外一种形式的变量 函数的创建和执行 定义函数的方式 函数声明 ```js function test(){ } ``` 函数表达式 ```js //命名函数表达式 var test = function abc(){ } //匿名函数表达式 var test = function(){ }

重操JS旧业第九弹:函数表达式

函数表达式,什么概念,表达式中的函数表达式. 1 函数申明 function 函数名([函数参数]){ //函数体 } js中无论像这样的显示函数什么放在调用之前还是调用之后,都不影响使用,因为js解释引擎会将函数声明提前化,这点很好理解: 2 函数表达式 var functionV=function 函数名([函数参数]){ //函数体 }: 这种方式的一个变量指向了一个函数,仅此而已.js引擎只会把他当作一个函数类型的变量来处理,仅此而已. 3 递归调用 我们知道函数名仅仅是指向函数的指针,

关于JS中的函数定义及函数表达式

在初学JS的过程中,老是不能区别什么是函数表达式什么是函数定义,这对基础知识的夯实是不利的.因此查阅资料,认真对其进行了区别. 简单总结如下: 1.区别一:以function开头的函数纪委函数定义,其他则为函数表达式: 2.区别二:函数表达式可以省略函数名. function FunctionName(FormalParameterList) { FunctionBody } //函数定义 function [FunctionName](FormalParameterList) { Functi

js函数表达式和函数声明的区别

我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function foo() { // <-- 添加这一行 var a = 3; console.log( a ); // 3 } // <-- 以及这一行 foo(); // <-- 以及这一行 console.log( a ); // 2 虽然这种技术可以解决一些问题,但是它并不理想,因为会导致一些额外的

JS中函数声明与函数表达式的不同

Js中的函数声明是指下面的形式: function functionName(){ } 这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName = function(){ } 可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用中貌似也都是可行的,那他们有什么差别呢? 事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的.对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同

JS函数-函数声明和函数表达式之间的恩怨

"函数声明"和"函数表达式"其实说白了 就是定义函数的方式 函数声明: function 函数名(){.....} 通过上面方式定义的函数就是函数声明 函数表达式:通过函数表达式定义函数的方式比较多 1. var a = function test(){...} // 这是命名的函数表达式 var a = function(){...} // 这是匿名的函数表达式 2. 将"函数声明"定义的函数 用一对小括号括起来,这样也形成了函数表达式 (fu

JS学习笔记3_函数表达式

1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加载 2.闭包 有权访问另一个函数作用域中的变量的函数.闭包可以访问另一个作用域中的变量,因此闭包得到的变量值是最终值,而不是该变量在某一时刻的值,有一个很经典的例子: function createFuns(){ var result = new Array(); for(var i = 0;i <