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

1 . 函数声明

2. 函数表达式

# 差异

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

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

 #  函数声明提升

  函数声明

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

  函数表达式

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

# 注意以下这种情况

 //不要这样做。由于函数声明提升的原因,以下代码在ECMAScript中属于无效语法,浏览器尝试修正的错误的做法不一致。P176
var flag = true;
if(flag){
function sayHi(){
console.log("Hi");
}
}else{
function sayHi(){
console.log("Yo");
}
}
sayHi();//严格模式下会报错。 ReferenceError: sayHi is not defined
 //可以这样做,使用函数表达式。
var flag = true;
var sayHi;
if(flag){
sayHi = function(){
console.log("Hi");
}
}else{
sayHi = function(){
console.log("Yo");
}
}
sayHi();

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

  1. JS_高程7.函数表达式(2)递归

    递归函数:一个函数通过名字调用自身的情况构成的.eg: //递归实现阶乘 function factorial(num){ if(num <= 1){ return 1; }else{ retu ...

  2. 函数表达式(JavaScript高程笔记)

    函数声明 特点:函数声明提升(执行代码之前解析器会先读取函数声明,并使其在执行任何代码之前可用,意味着可以把函数声明放在调用语句之后) function functionName(arg0,arg1) ...

  3. JS高程3:函数表达式

    定义函数的方式有2种: 函数声明 函数表达式 函数声明是最常用的,函数声明的一个特征就是:在执行代码之前,就已经读取了函数声明. 这个特征还有一个专门的术语:函数声明提升. 递归函数 所谓递归函数,就 ...

  4. JAVASCRIPT高程笔记-------第 七章 函数表达式

    7.1递归 经典递归例子 function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num - ...

  5. js 匿名函数-立即调用的函数表达式

    先提个问题, 单独写匿名函数为什么报错?return 匿名函数 为什么不报错? 如图: 第二种情况在 f 还没有执行的时候,就报错了,,,当然这得归因于函数声明语句声明提前(发生在代码执行之前)的原因 ...

  6. 立即执行函数表达式(IIFE)

    原文地址:benalman.com/news/2010/11/immediately-invoked-function-expression/ 译者:nzbin 也许你还没有注意到,我是一个对术语比较 ...

  7. JavaScript 函数表达式

    JavaScript中创建函数主要有两种方法:函数声明和函数表达式.这两种方式都有不同的适用场景.这篇笔记主要关注的是函数表达式的几大特点以及它的使用场景,下面一一描述. 主要特点 可选的函数名称 函 ...

  8. JavaScript函数表达式、闭包、模仿块级作用域、私有变量

    函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表 ...

  9. javascipt的【函数表达式】

    函数表达式 在编程时,我们可以看到不管是什么类库,jquery也好,zepto也好,都会用到大量的命名函数和匿名函数表达式,本节点就是为了弄懂为何会有这些函数表达式,以及在什么情况下会使用到这些表达式 ...

随机推荐

  1. pp 总结一

    1.JQ $.get() <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  2. thinkphp5验证码使用

    simple 控制器中 /** * 生成验证码 * @param viod */ public function verify() { $captcha = new \think\captcha\Ca ...

  3. UICollectionView的常用方法

    class UICollectionView : UIScrollView //初始化,位置,风格 init(frame: CGRect, collectionViewLayout layout: U ...

  4. MyBatis的Mapper接口以及Example的实例函数及详解

    来源:https://blog.csdn.net/biandous/article/details/65630783 一.mapper接口中的方法解析 mapper接口中的函数及方法 方法 功能说明 ...

  5. grails2.3.3发布了-【grails】

    grails2.3.3发布了,在grails2.3.2中默认方式fork模式下无法运行的BUG也解决了. 需要做的相关修改为修改BuildConfig.groovy: build ':tomcat:7 ...

  6. Codeforces 305E Playing with String 博弈

    我们可以把每段连续可以选的字符看成一个游戏, 那么sg[ i ]表示连续 i 个字符可选的sg值. 然后找找第一个就好啦. #include<bits/stdc++.h> #define ...

  7. 获取Form表单数据转化成JSON对象

    $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() ...

  8. 026 UI调试

    读了这篇文档,感觉蛮好玩的.粘贴一下链接: http://www.cnblogs.com/Wayou/p/chrome-console-tips-and-tricks.html

  9. html-字体属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. html 水平竖直居中

    line-height:容器高度 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...