首页 > 试题广场 >

下面哪些关于块内声明函数的用法是正确的?

[单选题]
下面哪些关于块内声明函数的用法是正确的?
  • if (x) {  function foo() {}}
  • if (x) {  var foo = function() {}}
  • if (x) {  foo = function() {}}
  • ECMAScript明确的规范了块内函数,javascript实现了这个规范
不要在块内声明一个函数(严格模式会报语法错误)。如果确实需要在块中定义函数,可以使用函数表达式来声明函数。
http://amazeui.org/getting-started/javascript-guide?_ver=2.x

发表于 2016-03-23 12:58:38 回复(6)
块内声明的变量只要没加var 都算作全局变量。
js看起来像支持块级作用域,实际上只有函数作用域和全局作用域。
JavaScript语言精粹内对全局变量有明确的批判
A,声明一个全局匿名函数
C,声明一个全局函数foo
D,ES6才规定块级作用域。

JS是什么垃圾,TS才是王道
编辑于 2019-11-15 16:39:02 回复(13)
A:函数声明的形式定义函数有声明提升的特性,也就是不论是否进入if(x),foo都定义了
C:函数表达式形式,foo前无var,所以foo为全局变量
发表于 2016-10-05 17:53:14 回复(6)
发表于 2018-03-29 11:07:16 回复(1)
小红书,p176
发表于 2017-04-09 22:40:04 回复(4)
B也不对,foo会被提升,值为undifined
发表于 2017-03-17 23:10:43 回复(0)
javascript里if语句是没有块这个概念的呀。 我觉得这个答案是错误的。
编辑于 2015-10-14 11:03:59 回复(5)
A函数申明会函数提升,自动提升到上级作用域;
B中为函数表达式形式,var申明的foo变量会提升,但是函数不会提升。
发表于 2019-03-25 10:34:17 回复(0)
不要在块内声明一个函数(严格模式会报语法错误)。如果确实需要在块中定义函数,可以使用函数表达式来声明函数。
发表于 2021-05-21 16:30:42 回复(0)
在块作用域里使用函数 要用匿名函数
发表于 2021-07-04 22:21:45 回复(0)
<p>js不支持块内函数声明</p><p><br></p><p>函数声明在堆中创建一个函数对象并用一个变量指向该对象</p><p><br></p><p>题中var定义的变量被提升到if外部的函数作用域,该函数应归属于外部的函数作用域.</p><p><br></p><p>想要让函数归属于块作用域应遵循es6块作用域定义,使用let/const声明块变量并将改变量指向匿名函数,则该函数只能在块中使用</p>
发表于 2020-11-27 15:38:01 回复(0)
不要在块内声明一个函数(严格模式会报语法错误)。
如果确实需要在块中定义函数,可以使用函数表达式来声明函数。
发表于 2019-01-28 10:05:57 回复(0)
es5的严格模式下上面的代码都是错的
发表于 2016-06-19 00:09:05 回复(0)
块内声明函数,最好使用函数表达式来声明(选项b)因为其他方式,严格模式下会报错
发表于 2022-03-26 11:51:56 回复(0)
疑问一:不要在块内声明函数,如果需要在块内定义一个函数,那么要用函数表达式,不能用functon直接声明。(why
              为什么不能在语句块内声明函数?
if (x) {  function foo() {}}  //所以这个语句错



疑问二:在if语句的块内,用let 声明变量foo后,{}才是这个变量foo的块级作用域,用var 声明变量  if的{}还是块级作用域吗?
              还是说语句的{}不要求是块级作用域?为啥要求或者为啥不要求?
if (x) {  var foo = function() {}}



疑问三:在if语句块内直接foo, 难道不相当于在全局声明了一个foo吗?跟疑问二中的语句有啥不一样?
if (x) {  foo = function() {}}
编辑于 2022-01-07 16:19:40 回复(0)
<p>垃圾,if里面怎么是块,用let才行吧</p>
发表于 2020-11-07 15:52:50 回复(0)
出这种题目真是没什么意义的
发表于 2017-06-09 04:58:26 回复(0)
在模块内声明函数用 函数表达式形式 A函数声明作用域为全局,不是模块内
发表于 2017-04-11 16:00:09 回复(0)
es6明确说了用let可以实现块级作用域
发表于 2017-03-17 08:27:36 回复(1)
b
发表于 2015-08-03 09:54:11 回复(0)