首页 > 试题广场 >

非严格模式下,下面给定的代码中, myFunc() 返回什么

[单选题]

非严格模式下,下面给定的代码中, myFunc() 返回什么?

var foo=’foo’;

var bar=’bar’;

function myFunc() {

return foo+bar;
}

myFunc();

  • 抛出异常,超出访问范围
  • undefined
  • foobar
  • foo+bar
  • NaN
这一题没到执行啊,
发表于 2017-10-04 10:42:34 回复(6)
现在是2021年的,题目没有函数调不调用和中文引号的问题。我感觉问题出在非严格模式下选foobar,严格模式下选undefined吧,不知道理解的正不正确。
发表于 2022-01-05 08:32:59 回复(0)
中文单引号不是应该直接报错吗?为什么还能继续走下去?
发表于 2021-09-14 21:35:07 回复(0)
在默认情况下,函数里面的变量没有定义时候会调用全局变量 +号字符串拼接
发表于 2021-09-13 18:59:45 回复(0)
选c,就是把两个字符串拼在一起了
发表于 2017-02-26 12:11:29 回复(1)
默认情况下,即标准模式下,当函数里面的变量没有定义时候会调用全局变量,所以"foo"+"bar"等于“foobar”。
如果是严格模式下就不是这样了,严格模式下会说变量undefined
发表于 2018-09-01 16:54:13 回复(6)
不要理解太难,+和-不一样,+的默认首选功能就是字符串拼接
发表于 2017-09-16 21:01:52 回复(1)
为什么在浏览器里调试是undefind?
发表于 2017-03-14 09:33:03 回复(9)
var foo=’foo’;
var bar=’bar’;
function myFunc() {
return foo+bar;
}

//相当于
var foo 
var bar 
function myFunc(){
return foo+bar    
}
foo = 'foo'
bar = 'bar'

//根据题意执行
console.log(myFunc())//打印foobar

发表于 2019-08-27 20:24:37 回复(0)
考查的应该是预编译的时候,对函数与变量的处理,以及调用。
浏览器执行这段代码的时候,会把变量的声明提升到全局作用域的首部,然后会预定义函数(不等于执行调用函数,我误以为在执行这段代码前的预定义阶段,这里会执行里面的代码)

NAN还是返回字符串,关键点在于是否在函数调用前,完成对变量的赋值工作。
undefined+undefined 当然等于NAN(not a number)
发表于 2018-01-29 16:21:38 回复(0)

加法操作符(+)的用法:

  • 如果两个操作数都是数值,执行常规的加法操作
  • 如果两个操作数是字符串,执行字符串拼接操作
  • 如果一个操作数是字符串,另一个不是,则将后者转换为字符串,再进行拼接
发表于 2022-07-17 23:03:39 回复(0)
var foo=’foo’;
var bar=’bar’;
function myFunc() {
return foo+bar;
}
myFunc();

//相当于

var foo;
var bar;
function myFunc() {
return foo+bar;
}
foo = 'foo';
bar = 'bar';
myFunc();

发表于 2022-07-16 21:24:44 回复(1)
严格模式禁止使用未声明的变量
发表于 2022-03-02 10:04:37 回复(0)
出题目,严谨点好么?这里的myFunc可以有多种执行方式,谁知道你要执行那种。
发表于 2020-05-23 17:25:29 回复(0)
我是个傻子
发表于 2019-07-18 09:24:00 回复(0)
首先说一下结论,正确答案是NaN
无论你是否严格模式,都是NaN。

ES5下,会存在变量提升和代码预解析:

1- 预解析:
函数块 myFunc 被提升 是一个完整的函数块,变量 foo, bar 被提升,值是undefined;

2- 逐行执行:
它执行的时候是按照从上到下的顺序执行的,
所以应该先执行 myFunc() 的时候在函数“解析库”中找到的值其实是undefined。

undefined + undefined ,结果是NaN 。


 

发表于 2020-09-23 10:44:47 回复(1)
将题中代码改写为:
//变量提升和函数声明提升
var foo;
var bar;
function myFunc(){
    return foo+bar;
}
//赋值不提升
foo='foo';
bar='bar';
//myFunc函数的返回值,通过console输出出来
console.log(myFunc());


发表于 2020-02-13 19:38:49 回复(1)
真是服了   这个题复制到浏览器里就是会报错的  定义变量用的是中文   有的题说这个 中文双引号的问题 有的题又不说了   出题的人脑子在想什么

发表于 2022-09-06 15:51:58 回复(0)
审题呀
发表于 2022-01-19 23:02:33 回复(0)
嚴格模式會報SyntaxError錯
发表于 2021-12-24 11:52:03 回复(0)