>웹 프론트엔드 >JS 튜토리얼 >자바스크립트 피연산자 평가 order_javascript 기술

자바스크립트 피연산자 평가 order_javascript 기술

WBOY
WBOY원래의
2016-05-16 18:03:161192검색

예를 들어

코드 복사 코드는 다음과 같습니다.

a * b c; >
, 지수를 먼저 계산하고, 곱셈과 나눗셈, 마지막으로 덧셈과 뺄셈
, 괄호가 있으면 괄호 안의 내용을 먼저 계산하고, 같은 수준의 연산은 에서 순서대로 수행됩니다. 왼쪽에서 오른쪽으로
이때 모든 프로그래밍은 수학에서 숫자의 계산 순서를 채택합니다. 물론 프로그래밍 언어에는 수학의 연산자와 다른 연산자가 있습니다. 피연산자의 평가 순서는 무엇입니까?
다음과 같습니다

코드를 복사합니다 코드는 다음과 같습니다.
// 찾기 a와 b의 합
sum = a b;

, 메모리에서 a 값 가져오기
, 메모리에서 b 값 가져오기
, 덧셈 수행 수술
은 매우 서술적인 것 같습니다. 정신 지체, 물론 그렇습니다. 어떤 사람들은 먼저 b의 값을 취한 다음 a를 취하고 그 값을 더한다고 생각할 수도 있습니다. 최종 결과는 동일합니다. 물론. 하지만 피연산자가 함수 실행이라면 어떻게 될까요?
sum = a fun();
fun 함수는 하나의 숫자만 반환한다고 가정합니다. 이때 먼저 a의 값을 취하고 fun이 실행된 후에 값을 얻는지는 중요하지 않습니다. 최종 결과는 동일합니다. 그러고 보니 아직 새롭거나 혼란스러운 부분은 없습니다.
하지만 fun이 숫자를 반환할 뿐만 아니라 a도 변경한다면 어떻게 될까요? 예를 들어 다음 JavaScript 코드

코드 복사 코드는 다음과 같습니다.
var a = 5;
function fun(){
a = 10;
return 20;
} var b = a fun();


fun 함수는 20을 반환할 뿐만 아니라 a의 값도 변경합니다. 그리고 a는 덧셈 연산에 참여하는 a입니다. 이때 추가 작업에 참여하려면 5개 또는 10개가 필요합니까? 5이면 b의 값은 25이고, 10이면 b의 값은 30입니다. JavaScript의 결과는 25입니다. 그런데 C 언어에서는 30 입니다.


코드를 복사하세요 코드는 다음과 같습니다.
int a = 5;
int fun(){
a = 10;
return 20;
}
int b = a fun(); 🎜>
따라서 함수에 부작용이 있는 경우에만 피연산자의 평가 순서가 다르면 결과가 달라집니다. 분명히 각 언어는 이를 다르게 구현합니다.
JavaScript 언어에서는 왼쪽에서 오른쪽으로 a가 5를, fun이 실행 후 20을, 마지막으로 5 20을 반환합니다. 참고로 이 연산에 참여할 때는 a가 5이지만 실제로는 a의 값이 변경되었습니다. 다음과 같습니다



코드 복사
코드는 다음과 같습니다. var a = 5; >function fun( ){ a = 10;
return 20;
}
var b = a fun();
alert(a); // 10


C 언어에서는 fun이 먼저 실행되고 a의 값이 fun으로 변경되어 10이 됩니다. 이 "추가" 연산에서는 fun이 20을 반환합니다. 결과는 10 20입니다.
JavaScript인지 C인지 알 수 있습니다. a의 값이 최종적으로 10으로 변경되었습니다. 차이점은 덧셈 연산에 참여할 때 JavaScript는 변경되지 않은 값 5를 취하고 C는 변경된 값 10을 취한다는 것입니다.
C언어에서도 연산은 왼쪽에서 오른쪽으로 진행됩니다. 하지만 피연산자로 함수가 있는 경우 해당 함수가 먼저 실행됩니다. 수정된 기능에 부작용이 있는 경우 변경된 값이 이 작업에 참여하는 데 사용됩니다. 재미와 순서에 관계없이. 앞에 다음과 같이 재미있게 넣어보세요. C 언어에서는 결과가 여전히 30



코드를 복사합니다.
코드는 다음과 같습니다. int a = 5; int fun(){ a = 10;
return 20;
}
int b = fun() a; 30


fun과 a의 순서를 JavaScript로 바꾸면 결과는 25가 되지 않습니다.



코드 복사
코드는 다음과 같습니다. var a = 5; fun() { a = 10; return 20;
}
var b = fun() a; // b는 30


관련 항목:

기능의 부작용
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.