首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript(js函数声明与函数表达式的区别

在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的。...函数声明与函数表达式用代码写出来是这样的: //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){...注意,我们是调用的函数表达式,这样的结果是会报错,为什么呢?...至于下面这种函数表达式,为什么在函数表达式上面执行会报错呢?来看看下面的代码 console.log(a) var a=1; 这段代码的执行结果是什么呢?...undefined,这是不是很像我们的函数表达式了,其实,如果说我们在函数表达式之前也打印一下这个say1(),结果也是undefined,原因就是带有var 的变量,当然这里说的是全局变量,它在预解析的时候会有一个变量提升

81230
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    Js中的函数声明是指下面的形式: function functionName(){ }         这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName...事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的。...对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,...当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。

    1.4K20

    JS函数声明与函数表达式的异同

    不同点 注:函数声明和函数表达式的不同点包括但不限于以下几点 相对函数声明和函数表达式之间的相同点,它们的不同点更应该值得我们关注。下面我结合自己的理解聊聊。...函数声明必须有标识符,也就是常说的函数名;函数表达式可以省略函数名。 关于它们的定义的不同小伙伴们应该都知道,我们简单重复一遍。...例子的话还是前文的说真话函数: 即函数声明的话sayTruth()可以提前调用,就是不请自来的那种,而函数表达式是什么时候遇到什么时候执行。...注意,括号里面的是表达式。 (function(){ alert('博主的名字是:myvin 。'); })() 事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的。...对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,

    1.2K50

    JS 中的函数表达式函数声明你混淆了吗?

    1.函数表达式vs函数声明 函数声明和函数表达式是使用 function 关键字创建函数的2种方法。...但是sumB是使用函数表达式创建的(将其包装在括号中),该函数表达式不会在当前作用域内创建函数变量。 如果你想访问使用函数表达式创建的函数,那么将函数对象保存到一个变量中: // Works!...,否则为函数表达式。...3.函数表达式 当function关键字在表达式内部创建函数(带有或不带有名称)时,将出现函数表达式。...: 如果表达式中的函数没有名称,例如 function(){return 42},那是一个匿名函数表达式 如果函数具有名称,例如 上一个示例中的sumB和回调,那么这是一个命名函数表达式 3.1 函数表达式的注意事项

    74430

    灵活使用JS函数声明与函数表达式要弄清哪两点?

    函数声明和函数表达式到底有什么区别? 要弄清函数声明和函数表达式的区别,首先要明白在JS中声明和表达式的行为存在十分微妙而又十分重要的差别。...所以不要在条件语句中使用函数声明,而可以使用函数表达式。...由于存在上述限制,只要函数出现在块中,实际上就可以看作是一个语法错误,而不用管什么函数声明或表达式。 所以较佳实践应是,不要把函数写在语句或块中,不管是声明函数还是表达式函数。...表达式函数里有匿名表达式函数和命名表达式函数。 所谓的命名函数表达式,指的是有名字的函数表达式,这个名字技术上称为标识符。...在实际开发中,函数声明和函数表达式可以灵活选择,只是需要理清两点:变量和作用域的提升问题,在函数表达式中注意匿名函数表达式和命名函数表达式的区别。

    67230

    JS函数

    (){ console.log("hello js") } sayHello() 参数 形式参数 : 在函数声明时, 设置的参数。...//带参数的函数声明 function 函数名(形参1, 形参2, 形参...){ //函数体 } //带参数的函数调用 函数名(实参1, 实参2, 实参3); 计算2个数的和 ...函数作用域 :在 函数内的区域 叫做函数作用域,在函数作用域内声明的变量叫做局部变量 ,局部变量只有在当前函数内才能访问到。...预解析 js执行代码分为两个过程: 预解析过程(变量与函数提升) 代码一行一行执行 console.log(num); var num = 1 console.log(num) 预解析过程 把var声明的变量提升到当前作用域最前面...把函数声明提升到当前作用域的最前面。 如果函数同名 , 后者会覆盖前者 。 如果var声明的和函数声明的同名, 函数优先。

    11.1K40

    JS函数

    函数定义        函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块;       函数就是包裹在花括号中的代码块       function 函数名()       {        ...这里是要执行的代码      } 二 函数的声明和调用    函数的声明必须使用关键字function    关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数    函数本身不会自动运行...,只有当调用该函数时,才会执行函数内的代码    函数可以通过其名字加上括号中的参数进行调用 三 带有返回值的参数      使用return 语句来返回值 可以将返回值赋值给一个变量,然后对变量进行操作...四 arguments对象    在函数代码中,使用特殊对象 arguments存储函数调用传递给该函数的所有参数   可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length...sun+=arguments[i]; } return sun; } var s= sum(2,3,4,5);//虽然sum函数时没有参数的

    5.3K20

    函数表达式

    下述内容主要讲述了《JavaScript高级程序设计(第3版)》第7章关于“函数表达式”。 一、回顾 定义函数的方式有两种:第一种是“函数声明”,另一种就是“函数表达式”。...“函数声明”会被提升,意味着把函数声明放在调用它的语句后面。...function function a() { console.log("a"); } var b = function() { console.log("b"); }; 声明本身会被提升,而包含函数表达式在内的赋值并不会被提升...函数提升的关键,就是理解函数声明与函数表达式之间的区别。...定义:指有权访问另一个函数作用域中的变量的函数。 当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。

    48841

    函数声明与函数表达式

    函数声明与函数表达式 定义一个函数的方法主要有三种 函数声明、函数表达式、new Function构造函数函数声明与函数表达式定义的函数较为常用,构造函数的方式可以将字符串定义为函数。...s(){ console.log(1); } } 此处可以看到函数的声明被提升,但是函数体并未被提升,JS只有函数作用域与全局作用域以及ES6引入的let和const块级作用域...函数表达式 函数表达式只会提升变量的声明,本质上是变量提升并将一个匿名函数对象赋值给变量。...var s = function(){ console.log(0); } function s(){ console.log(1); } s(); // 0 在JS函数是第一等公民,...也就是说,同一作用域下提升,函数会在更前面。即在JS引擎的执行的优先级是函数声明、变量声明、变量赋值。

    55740

    函数声明与函数表达式

    函数声明:直接声明一个函数 function fnName() {};function声明必须有方法名,而出现在表达式里的方法名都会被忽略。...函数表达式:通过赋值,将一个变量的引用指向一个指定的function或匿名函数,如: var fnName = function () {};//可以是匿名函数也可以是具名函数 分析下现两段代码: <script...return 'x'; } alert(a); 两者其实差异并不大,主要是在var a = function a() {}这一点上,IE与其它浏览器解析上存在差异,其中IE是无论是它作为函数表达式或是函数声明...可以理解为在解析代码段时,将var先提前进行声明,提到当前scope前面,然后再对函数表达式进行预解析。...想继续了解具名函数与匿名函数的,可以点击下面的链接查看我之前写的文章: hi.baidu.com/meteoric_cry/blog/item/65f8d3c4651d64a58326ac23.html

    77840

    js正则表达式

    js正则表达式 目录 正则表达式定义及作用 字符串方法使用正则表达式 修饰符及模式 RegExp对象 实际用例 正则在线工具 正则表达式定义及作用 定义 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式...语法 /正则表达式主体/修饰符(可选) 作用 文本搜索 文本替换 字符串方法使用正则表达式 search()方法 检索与正则表达式相匹配的子字符串,并返回子串的起始位置 代码实例 var...执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) 修饰符可以叠加, 此处使用两个修饰符i,g 修饰符及模式 修饰符 i执行对大小写不敏感的匹配 g执行全局匹配 m执行多行匹配 表达式...匹配任何包含零个或一个n的字符串 RegExp对象 RegExp对象是一个预定义了属性和方法的正则表达式对象 test()方法 用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本...正则表达式在线生成工具 http://tools.jb51.net/regex/create_reg

    7.3K30

    JS函数hook

    前言​ 我在阅读《JavaScript 设计模式与开发实践》的第 15 章 装饰者模式,突然发现 JS 逆向中 hook 函数js 中的装饰者模式有点像,仔细阅读完全篇后更是对装饰器与 hook...书中给的例子想说明的,想为某个原函数(比如这里的 add)添加一些功能,但该原函数可能是由其他开发者所编写的,那么直接修改原函数本身将可能导致未知 BUG,于是便可以用上面的方式进行复写原函数的同时,还不破坏原函数...this 指向问题​ 但并不是什么函数都能这样操作,或者说这样操作会导致原本函数可能执行不了,比如 this 指向,虽说没有修改原函数,但是原函数的 this 已经给我们更改成当前环境下(如window...,而后者通过函数原型链将参数与结果通过回调函数的形式进行使用。...在不考虑 this 指向,我个人更偏向第一种写法,而第二种写法也确实让我眼前一亮,很巧妙的使用 js 的原型链,从而避免 this 指向的问题。

    3.5K10

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券