JavaScript(js)函数声明与函数表达式的区别
在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的。
函数声明与函数表达式用代码写出来是这样的:
//函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){ console.log("函数表达式") }
那我们来看看,这两种方式到底有什么不同呢?
首先,在函数调用方面,看下面的代码
say(); //函数声明 function say(){ console.log("函数声明") }
这样的执行结果是什么呢?答案是打印出“函数声明”,那你看下面的代码
say1(); //函数声明 function say(){ console.log("函数声明") } //函数表达式 var say1 = function(){ console.log("函数表达式") }
这样的执行结果是什么呢?注意,我们是调用的函数表达式,这样的结果是会报错,为什么呢?
一起来看看,首先我们先说第一种,函数声明的调用,函数声明的调用这个其实不用讲你就知道,函数声明了嘛,哪里都可以调用的(function会有预解析,预解析之后函数就存在了,所以那里都能调用它了)。至于下面这种函数表达式,为什么在函数表达式上面执行会报错呢?来看看下面的代码
console.log(a) var a=1;
这段代码的执行结果是什么呢?undefined,这是不是很像我们的函数表达式了,其实,如果说我们在函数表达式之前也打印一下这个say1(),结果也是undefined,原因就是带有var 的变量,当然这里说的是全局变量,它在预解析的时候会有一个变量提升,变量提升是什么意思呢,看上面这段代码,其实就相当于下面这段代码
var a; console.log(a); a=1;
现在知道了吧,a这个变量是存在的,并且初始化成了一个undefined,所以说我们的函数表达式也是一样的,它也有变量提升,在将函数赋值给你定义的变量之前,调用就会报它不是函数的错,而打印出来就是undefined,是不是很好理解呢,学到了吗?
如果你觉得对你有帮助的话,记得点个关注哦,我会持续更新更多你想知道的,谢谢!
JavaScript(js)函数声明与函数表达式的区别的更多相关文章
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- 详解Javascript 函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)
写作缘由: 平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种 ...
- js学习之函数声明与函数表达式区别[原创]
作为一名js初学者,与大家分享下.Javascript中有函数声明提升的功能,会优先编译函数声明部分.比如, ff(); function ff(){ alert("hello world. ...
- js函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){ return type==="Declaration ...
- 转载 JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){ return type==="Declaration ...
- JS中函数声明与函数表达式的异同
相同点 注:函数声明和函数表达式的相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出.被赋值.作为参数传给其他函数等相关操作,不管函数是以什么方式被定义的,当然和其他值的 ...
- Js中函数声明和函数表达式的区别
先看以下几段烧脑的代码: f();//=>? var f = function () { console.log("var"); } function f() { conso ...
随机推荐
- win10//ubuntu安装tensorflow-gpu与kears,并用minist测试
WIn10 安装cuda 先安装VS,然后根据自己的版本安装CUDA. 安装完后,打开cmd命令行输入nvcc -V,检测是否安装成功 安装cuDDN 安装对应版本,解压后覆盖到CUDA的地址,默认为 ...
- jmeter json乱码
0 环境 系统环境:win7 1 操作 1 找到jmeter.properties 找到jmeter下的bin目录jmeter.properties文件 例如apache-jmeter-\bin\jm ...
- [LC] 105. Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- asp.net---jquery--ajax 实现滚动条滚动到底部分页显示
前台:aspx页面 var bgtime = $(" #date1 ").val(); var overtime = $(" #date2 ").val(); ...
- 利用数目找中位数(牛客第七场E)
https://ac.nowcoder.com/acm/contest/887/E 树状数组做法(代码有注释) #include<bits/stdc++.h> using namespac ...
- python面向对象类的约束和设计的统一化规范
.封装 定义:将一些东西内容封存到一个地方,你还可以再取出, 类设置静态属性,设置一些方法 对象可以在其对象空间中封装一些属性 2.多态 定义:一个事物的多种形态 就想a可以是一个字符串,可以是一个列 ...
- maxquant|
使用maxquant 设定修饰: 设定打分值: 设定有标定量方法:iBAQ,虽然是无标定量方法,但是设定该值后也会有相应有标定量方法的iBAQ值. 根据计算机性能设定线程数: 设定酶切位点 最后生成文 ...
- 获取指定网卡对应的IP地址
#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <sys/ty ...
- Angular开发者指南(五)服务
服务 AngularJS服务是使用依赖注入(DI)连接在一起的可替代对象. 可以使用服务在整个应用程式中整理和分享程式码. AngularJS服务有: 延迟初始化 - AngularJS只在应用程序组 ...
- jmeter如何解决乱码问题
使用jmeter的时候时常遇到中文乱码的情况,下面总结一下几个解决方法,方便以后进行复习. 1.添加后置处理器Beanshell PostProcessor,在输入框内写入“prve.setDateE ...