javascript基础语法(表达式),见解。

进入误区,请帮忙解答

函数调用表达式
function fn() {}
fn() 这函数调用表达式会返回一个值所有是一个表达式。当函数fn中return后面没有值的时候,返回的就是undefined,有值则返回的就是return后面的值,是否可以这样理解?

函数表达式
var a = function() {};
function() {} 单独应该是一个函数声明吧。
当赋值变量a时,a = function() {} 就有一个表达式。如果这样的话,a = function() {}应该会返回一个值吧,如果是这样的话,请问值是多少?

原是表达式
var b = 1; 在这1是一个表达式,b=1也是一个表达式。
不解的是 函数表达式以上为例。function() {} 就不是表达式?而a = function() {}这样就是表达式了呢?

比较
函数调用表达式。调用时会返回一个值。所以是表达式。
函数表达式。还以上函数表达式为例。function() {}没有被调用,所以不会返回值,就是一个函数声明,不解的是赋值给a后,这 a = function(){} 后就是表达式了呢?是的话应该肯定返回一个值吧。那值是什么呢?


繁星coding
浏览 686回答 5
5回答

胡说叔叔

本来这么基础的问题是不想回答的,但是看了前面几个回答,感觉不少人对表达式这个基础知识点可能还不是完全理解,所以就简单写一下吧。什么是表达式?表达式是用运算符连接的一个或多个值、变量、函数及其他运算数所形成的式子。fn()这是一个函数调用表达式,因为()是函数调用运算符(去查一下运算符有哪些就知道了)a = function() {}这是一个复合表达式,它由a、function() {}两个子表达式和一个赋值运算符组成。但是注意var a = function() {};不是一个表达式,而是一个语句,因为它包含var和分号,它们都不是运算符b = 1和var b = 1;与上一条相同不解的是 函数表达式以上为例。function() {} 就不是表达式?而a = function() {}这样就是表达式了呢?首先,为什么单独写function a() {}不是表达式?这是因为这句代码“声明”了一个名为a的函数。在解析的时候,JS引擎会对这种形式的函数声明做一些特殊处理,比如声明提升。用一句不太严格的话来解释,函数声明类似于整条语句var a = function() {};,只是JS引擎在遇到这么一个声明的时候会自动对其进行提升。前面已经解释过这种形式的语句不是表达式。那为什么a = function() {}是一个表达式呢?在JS中,函数是一等公民,可以像其他值和变量那样赋值、传递,这个表达式右边正是这么一个函数类型的值。甚至你还可以这么写:a = function a() {},右边看起来与前面的函数声明更像了,但这仍然是一个表达式,因为在JS中,匿名函数也可以指定一个名字。因此关于这一点,总结下来就是:JS引擎在解析时会依据函数的定义形式不同而做出不同的解析,其中仅会在函数定义不作为任何子表达式存在时才是函数声明,否则就会把该函数的定义当做函数表达式来解析。

阿晨1998

你这儿就是典型的理解过度。给你一段代码,自己领悟吧var a;  //声明一个变量 这里是一个声明a = 13; //变量赋值上面的代码等同于var a = 13; //声明变量并赋值 这里是一个表达式同理:function a(){  //这里一个声明}  var a = function(){  //这里是一个表达式    }

潇潇雨雨

简单地说,这是语言规范规定的:function a() {}单独存在时就是函数声明,否则是函数表达式。证据(或说明)请参考语言规范。如下:一. 首先,看一下函数声明()和函数表达式()的定义:FunctionDeclaration :    function Identifier ( FormalParameterList[opt] ) { FunctionBody }FunctionExpression :    function Identifier[opt] ( FormalParameterList[opt] ) { FunctionBody }可见,但从语法形式上,两者几乎是完全一样的。唯一区别是,作为函数表达式时,标识符是可选的。二. 函数声明只能单独使用,是一个与声明(statement)同级别的语法单元:Program :    SourceElements[opt]SourceElements :    SourceElement    SourceElements SourceElementSourceElement :    Statement    FunctionDeclaration三. 而函数表达式作为一个``,是只能作为其他表达式的一部分使用,不能单独存在的:MemberExpression :    PrimaryExpression    FunctionExpression    MemberExpression [ Expression ]    MemberExpression . IdentifierName    new MemberExpression ArgumentsOK,这就很清楚了。

开心每一天1111

赋值运算的返回值等于等号右边的返回值,a = function(){} 的返回值就是function 的引用地址。a = b =function(){}; a===b//true
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript