关于函数表达式的标识符/函数名
函数的标识符也就是通常说的函数名,在函数声明中不可省略,而函数表达式中可以省略。
我们都知道,javascript引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会像变量提升一样被提升到代码头部。所以函数声明先执行也不会报错,而函数表达式则会。
对于下面的代码
foo();bar();var foo=function bar(){console.log(1);}
我们根据变量提升和函数提升的理论可以肯定是会报错的,实际运行下
foo(); //Uncaught TypeError: foo is not a function
bar(); //Uncaught ReferenceError: bar is not defined
一开始我的理解是,变量foo被提升后,等同于
var foo //undefined
foo=function bar(){console.log(1);
}
浏览器还不知道bar是什么,报错 ReferenceError: defined 很正常。那么下面这样呢:
var foo=function bar(){console.log(1);
}
bar();
或者
new function bar(){//作为New表达式(NewExpression)的一部分,它也是函数表达式console.log(1);
}
bar();
运行结果依旧是bar(); //Uncaught ReferenceError: bar is not defined。这和想象中不符啊,没有先执行,为什么bar依旧是defined?既然函数标识符被视同变量名,那么对于函数表达式的标识符,怎么会找不到,所以它的作用域在哪里?
所以有了下面的代码:
var foo = function bar(){console.log(bar);
}
foo();
打印结果如下:
ƒ bar(){
console.log(bar);
}
果然思路没错,函数表达式的标识符的作用域就在它自己的函数体。函数名是不能调用函数表达式的,如果要调用,也只有递归的情况了。
除此之外,通过搜索引擎找到关于函数表达式的标识符这样的卵用,例子如下:
var f1 = function b1(){return f2();
}
var f2 = function b2(){return f3();
}
var f3 = function b3(){debugger;
}
f1();
当每个函数都给上标识符,那么调用栈就会显示被调用的函数的名字
是不是看起来就比较明朗√
关于函数表达式的标识符/函数名相关推荐
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- 函数声明、函数表达式、匿名函数、立即执行函数
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- 函数表达式与命名函数区别
函数表达式: 1.把一个函数赋值给一个变量,叫做函数表达式 2.var 变量名 = 匿名函数; 3.函数表达式中,匿名函数后一定要有";"分号 4.变量名+()括号 即调用了函数 ...
- 逆推继承看原型 函数的角色 函数声明和函数表达式的区别 函数中this指向的问题
逆推继承看原型 <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...
- matlab已知函数表达式画函数图像,怎么用matlab画已知函数表达式的一个函数图像?函数比较复杂的……...
点击查看怎么用matlab画已知函数表达式的一个函数图像?函数比较复杂的--具体信息 答:要具体哦,如果一个自变量,函数图像就是曲线,用plot 如果是2个自变量,函数图像就是曲面了,如f=3*exp ...
- 【JS基础】立即执行函数表达式(自执行函数)
立即执行函数表达式 立即执行函数表达式,大部分人也称为自执行函数. 自执行函数的写法 匿名函数 (function() {console.log(2) })() 具名函数 (function log( ...
- matlab 中调用s函数表达式,[求助]S函数中能否调用M函数
[求助]S函数中能否调用M函数 我现在写了一个S-FUNCTION 里面调用了一些M函数,当把S函数的名字写入S-FUNCTION块的时候 总是出现 ??? SWITCH expression mus ...
- 一文探索 JavaScript 最强大特性—函数表达式
函数是 ECMAScript 中最有意思的部分之一,这主要是因为函数实际上是对象.每个函数都是 Function 类型的实例,而 Function 也有属性和方法,跟其他引用类型一样.因为函数是对象, ...
- 深入理解JavaScript系列(2):揭秘命名函数表达式(转)
前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简 单的说,命名函数 ...
最新文章
- 产品策划三:App启动页的策划方案
- MySQL STR_TO_DATE函数
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法...
- 爬虫实战:嗅事百科段子多页爬取
- VTK:Dijkstra 图形测地线路径用法实战
- linux100day(day6)--shell脚本简单逻辑
- redis主从复制和哨兵机制
- JVM性能分析与定位
- 【转】关于PHP的header(P3P: CP=CURa……)
- java版 高斯过程_高斯过程scikit-learn - 异常
- 设计模式学习之---Facade(外观)模式
- linux系统上查询ip地址归属
- Mac google浏览器可以百度 无法登录账号的解决方案
- API Guides Contacts Provider (三)
- 旷视科技科创板IPO上会在即,毫不吝啬研发投入
- css裁剪图片 clip-path
- 亚马逊云机器人平台RoboMaker新功能WorldForge使用测试
- Kotlin高仿微信-第58篇-开通VIP
- 自己快成猪了。。。。
- 格林耐特交换机配置命令参考