2

자체 실행 함수에 전달 된 인수를 수정할 수 있어야합니다.자체 실행 함수의 인수 수정

var test = 'start'; 
(function (t) {t = 'end'})(test); 
alert(test) //alerts 'test' 

그리고 here is a fiddle 다음은

은 몇 가지 예제 코드입니다. 변수 test은 변경되지 않았습니다. 참조로 전달할 때와 같이 어떻게 변경할 수 있습니까? object

답변

10

패스가 그 것이다 패스 별 참조 :

var test = { 
    message: 'start' 
}; 
(function (t) {t.message = 'end'})(test); 
alert(test.message) 

FYI, Array이기도 패스 별 참조.

+1

그것은 분할 머리카락을하지만 객체와 배열이 패스에 의해 참조되지 않습니다 객체에 대한 참조는 값에 의해 전달됩니다. 그것은 의미없는 구별처럼 보입니다. 실용적인면에서는 그렇지만 "참조로 전달"은 프로그래밍 언어 디자인에서 아주 특정한 것을 의미합니다. – Pointy

+0

고마워,이게 내가 필요한거야! (11 분 안에 수락 가능) – Doorknob

+0

@ Pointy 동의. – sweetamylase

3

JavaScript에서는 (정확히 )을 사용할 수 없습니다. 그러나 다음과 같이 할 수 있습니다.

var testBox = { test: "hello" }; 
(function(tb) { tb.test = "goodbye"; })(testBox); 
alert(testBox.test); // "goodbye" 

JavaScript는 함수 호출시 값만 전달할 수 있습니다. 변수 (예 : arguments 개체 및 매개 변수)에 별칭을 지정하는 경우가 하나뿐이기 때문에 충분히 흥미롭지 않습니다.

즉, 개체 속성은 (일반적으로) 변경 가능하므로 값을 수정하는 함수가 필요한 경우 개체 참조를 전달할 수 있습니다.

3

수행 할 수 없습니다.

최선의 방법은 개체를 전달한 다음 해당 개체를 업데이트하는 것입니다.

var test = { state: 'start' }; 
(function (t) {t.state = 'end'})(test); 
alert(test.state); // 'end' 
0

테스트 변수의 값을 함수의 인수로 전달하는 것입니다. 인수의 값을 변경 한 후에는 테스트 변수에 다시 지정해야합니다.

var test = 'start'; 
(function (t){t = 'end'; test = t;})(test); 
alert(test) //alerts 'test' 

또는

var myObject = {test: "start"}; 
var myFunc = function (theObject){ 
    theObject.test = 'end'; 
}(myObject); 
alert(myObject.test);