首页 > 试题广场 >

分析下面javascript代码: func...

[单选题]
分析下面javascript代码:
<script>
 function out(x){
     var temp = 2;
     function inside(y){
         document.write( x + y + (temp--));
     }
     inside(5);
 }
 out(3);
 </script>
输出结果为:
  • 8
  • 9
  • 10
  • 11
看了一堆评论,还是不懂(temp--)
网上找到了c语言写的后置++和前置++实现原理的的对比。看返回值,后置的返回的的未运算过的临时值。
*   {
//前置++
T& operator++()
{
    this = this + 1;  //执行递增
    return *this;
}
 
//后置++
T operator++(int) //占位符,表示后置++
{
    T tmp = this;
    this = this + 1; //执行递增
    return tmp; //返回临时值 
}


编辑于 2021-08-06 21:34:34 回复(0)

var i=1
var j=i++ //相当于先j=i 然后 i++ 就是让i自己+1 相当于i=i+1。i靠近 =,好,先赋值,再运算自身,
      //这时候j的值还是1但是i由于自己+1了,这时候i的值就是2了

var i=1
var j=++i //相当于先让i自己加1,加1后再赋值给j,运算符在前,那就先运算了++i=>i=i+1 => i=2
      //i运算后变成2,这时候再赋值给j,j=i就变成了j=2
//(i++)也是一样  相当于(j=i++)加个括号提升优先权,可以,但是你里面还是没变啊,i++不就相当于
//(j=i++) 先赋值,再运算,我不管你i了  我要是赋值的值,那就是j=i,你后面运算的也是运算i,i的值变了而已


发表于 2021-03-11 20:58:08 回复(0)
说优先级的那个,我服气
发表于 2021-02-08 23:34:08 回复(0)
没注意--在后,是先运算在--,草率了
发表于 2021-11-25 09:04:56 回复(0)

--运算符前置和后置的区别

如果该运算符作为后置操作符,则返回它递减之前的值。

如果该运算符作为前置操作符,则返回它递减之后的值。


后置:

var i = 5;

var a = i--;

console.log(i);//输出4

console.log(a);//输出5


前置:

var j = 5;

var b = --j;

console.log(j);//输出4

console.log(b);//输出4



发表于 2019-08-30 09:23:47 回复(1)
<p>很多朋友问为什么不先算括号里的呢?这已经是先算括号里的了,我们单独把括号摘出来 (temp--) 这算是一个表达式,那么这个表达式的值是多少?是2,temp先计算再自减所以表达式的值是2。</p>
发表于 2020-06-28 21:10:30 回复(1)
这道题有两个考点:
(1)var定义的变量有定义提升的问题。
(2)就是 a++ ; ++a;的问题。(a++就是等执行完改语句再加加; ++a 就是先加加再执行)
(btw,希望牛客的代码排版优化一下,这种排版无疑会增加题目难度~)
发表于 2020-03-20 17:16:30 回复(2)
评论区看完了,全是说ーー前置后后置的区别,我服了,这个谁不知道?就没有一个明眼人看出来这题考的是边界符括号()的优先级居然低于运算符的优先级吗?还是说你们都不会?所以都只说了一个最低级的答案?
 -----分割符----- 
查到了,优先级:
发表于 2020-12-16 09:00:46 回复(2)
先调用out(3),x=3,此时temp=2,
再调用inside(5),此时y=5,x=3,temp=2
然后执行x + y + (temp--)
temp--会在结束本次计算后执行,所以相当于x+y+temp
=>5+3+2
=>10
编辑于 2019-08-13 14:34:39 回复(0)
要区分temp--这个表达式 和 temp本身的区别

temp--  这个表达式值是2,而此时temp值是1
题目加的是  temp--  这个整体

如果题目加的是--temp,   --temp 这个表达式值是1,而此时temp值也是1
如果题目加的是--temp, 那么值就3+5+1=9

function out(x){
     var temp = 2;
     function inside(y){
         document.write( x + y + (temp--));
     }
     inside(5);
 }
 out(3);

//以上函数执行过程如下:
function out(x){
     function inside(y){  //函数提升
         document.write( x + y + (temp--));
     }
     var temp ;
     temp =2;
     inside(5); //此时调用inside(5),x=2,y=5,temp=2
 }
 out(3);



编辑于 2022-01-12 16:40:27 回复(0)
temp--在计算之后才执行
发表于 2019-08-20 09:56:11 回复(0)
应当将括号看作一个不做任何操作的计算式子,比如
a=1+temp--结果当然是先加了1,再减一
a=(temp--)也是一个道理,先计算,但计算不做操作,然后减一,虽然temp减了一但(temp--)这个表达式的返回值(可以这么理解)在减一之前已经计算完了
再看题目中x+y+(temp--),x+y的和加的是(temp--)的返回值,也就是说还是temp减之前的值
发表于 2022-01-13 16:47:57 回复(0)
运算符在变量前是先计算,再输出变量后的值(这时经过了计算,那就是计算后的值了)
在后是先输出变量的值,再计算,加括号也没用,因为这就是人家的计算方法
发表于 2021-11-18 15:29:21 回复(0)
我只想问为什么括号的优先级没有--高?
发表于 2020-10-30 02:06:05 回复(0)
c10
发表于 2019-08-07 10:08:42 回复(0)
操 前变后不变,操作符在前面返回值会变化,操作符在后面返回值不变化
发表于 2024-01-31 23:11:25 回复(0)
 function out(x){
     var temp = 2;
     function inside(y){
         console.log( x + y + (temp--)); //这里是先取temp的值,参与运算后再temp--;
         //和有没有括号无关 x-- x++ 优先级低  3 + 5 + 2
     }
     inside(5);
 }
 out(3);//10
编辑于 2022-03-06 19:27:26 回复(0)
为什么在浏览器中测试输出是underfined呢🤔
发表于 2022-03-02 15:17:28 回复(0)
后置:表达式返回它减之前的值,但变量本身是减了的
发表于 2021-09-26 23:24:06 回复(0)
1、out(3),x的值为3
2、temp的值为2
3、inside(5),y的值为5
4、inside函数中x+y+temp=10之后,temp才--;
发表于 2021-05-13 16:27:51 回复(0)