js赋值语句执行,在有函数的情况下执行顺序究竟是怎样的?

偶然看到这篇文章运算数的求值顺序,里面举了三个例子说明“当函数有副作用的时候,运算数的求值顺序不同会导致结果不同”

但是在运算符优先级表里面可以看到:
函数调用(19,从左到右)>加法(13,从左到右)>赋值(3,从右到左)

请问为什么存在顺序问题?不是应该先执行函数调用,再执行加法吗?

文章中的例子如下:

代码1

var a = 5;

function fun(){

    a = 10;

    return 20;

}

var b = a + fun();

console.log('a:', a);

console.log('b:', b);

// a: 10

// b: 25

代码2


// 交换 a 和 fun 的位置

var a = 5;

function fun(){

    a = 10;

    return 20;

}

var b = fun() + a;

console.log('a:', a);

console.log('b:', b);

// a: 10

// b: 30

代码3


// 让 fun 接收参数

var a = 5;

function fun(a){

    a = 10;

    return 20;

}

var b = fun(a) + a;

console.log('a:', a);

console.log('b:', b);

// a: 5

// b: 25

// var b = a + fun(a); 也能得到一样的结果

补充一下
从加法运算符的结核性来说,是先确定左值再确定右值。
但与关于结核性的解释是这样的:结合性决定了拥有相同优先级的运算符的执行顺序。
所以应该是先考虑优先级,再考虑结核性吧?还是我的理解有误?

不好意思,废话太多了。重复一下我的问题:
请问为什么“代码1”和“代码2”存在顺序问题?不是应该先执行函数调用,再执行加法吗?


长风秋雁
浏览 906回答 2
2回答

白衣染霜花

JS语法的顺序跟其他的不一样,并不是从上至下或者从左到右,而是从最简单的语句开始执行
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript