자바 스크립트 변수 참조 / 별칭
자바 스크립트에서 로컬 var에 별칭 / 참조를 할당하는 것이 가능합니까?
나는 C와 같은 것을 의미합니다.
function foo() {
var x = 1;
var y = &x;
y++;
alert(x); // prints 2
}
= 편집하다 =
이 코드에서 arguments.callee 별칭을 사용할 수 있습니까? :
function foo() {
arguments.callee.myStaticVar = arguments.callee.myStaticVar || 0;
arguments.callee.myStaticVar++;
return arguments.callee.myStaticVar;
}
JavaScript에서 정수 및 문자열과 같은 기본 유형은 값으로 전달되는 반면 객체는 참조로 전달됩니다. 따라서이를 달성하려면 객체를 사용해야합니다.
// declare an object with property x
var obj = { x: 1 };
var aliasToObj = obj;
aliasToObj.x ++;
alert( obj.x ); // displays 2
어느 정도 가능하면 클로저를 사용하여 변수에 대한 별칭을 만들 수 있습니다.
Function.prototype.toString = function() {
return this();
}
var x = 1;
var y = function() { return x }
x++;
alert(y); // prints 2, no need for () because of toString redefinition
별칭을 사용할 수 있는지 여부는 데이터 유형에 따라 다릅니다. 객체, 배열 및 함수는 참조로 처리되며 앨리어싱이 가능합니다. 다른 유형은 본질적으로 원자 적이며 변수는 값에 대한 참조가 아닌 값을 저장합니다.
arguments.callee는 함수이므로 이에 대한 참조를 갖고 해당 공유 객체를 수정할 수 있습니다.
function foo() {
var self = arguments.callee;
self.myStaticVar = self.myStaticVar || 0;
self.myStaticVar++;
return self.myStaticVar;
}
위의 코드에서 말한다면 있음을 참고 self = function() {return 42;};
한 후 self
다음을 참조 할 다른 개체 보다 더 arguments.callee
에 대한 참조를 유지 foo
. 복합 개체가있는 경우 할당 연산자가 참조를 대체하지만 참조 된 개체는 변경되지 않습니다. 원자 값을 사용하는 경우와 같은 경우 는 변수에 '새'정수를 할당하는와 y++
동일 y = y + 1
합니다.
내 이전 답변으로 편집하십시오 : 함수 호출을 계산하려면 다음을 시도해 볼 수 있습니다.
var countMe = ( function() {
var c = 0;
return function() {
c++;
return c;
}
})();
alert(countMe()); // Alerts "1"
alert(countMe()); // Alerts "2"
여기서 c는 카운터 역할을하며 arguments.callee를 사용할 필요가 없습니다.
user187291의 게시물을 확장 하면 getter / setter를 사용하여 함수를 사용해야하는 상황을 해결할 수도 있습니다.
var x = 1;
var ref = {
get x() { return x; },
set x(v) { x = v; }
};
(ref.x)++;
console.log(x); // prints '2'
x--;
console.log(ref.x); // prints '1'
in 2019 I need to write minified jquery plugins so I need it too this alias and so testing these examples and others ,from other sources,I found a way without copy in the memory of whe entire object ,but creating only a reference. I tested this already with firefox and watching task manager's tab memory on firefox before. The code is:
var {p: d} ={p: document};
console.log(d.body);
참고URL : https://stackoverflow.com/questions/1686990/javascript-variable-reference-alias
'program story' 카테고리의 다른 글
요소를 효율적으로 검색하는 방법 (0) | 2020.09.09 |
---|---|
명령이 완료 될 때까지 기다리지 않고 shell_exec를 사용하는 방법이 있습니까? (0) | 2020.09.09 |
자바 스크립트 중첩 함수 (0) | 2020.09.09 |
Windows에서 디렉터리 / 폴더의 트리보기? (0) | 2020.09.09 |
Azure의 새 스토리지 계정과 클래식 스토리지 계정의 차이점 (0) | 2020.09.08 |