program story

자바 스크립트 변수 참조 / 별칭

inputbox 2020. 9. 9. 07:58
반응형

자바 스크립트 변수 참조 / 별칭


자바 스크립트에서 로컬 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

반응형