원래 JS에서 금지해야 할 쓰기

2933 단어 JS능률안전

블록 레벨 함수


엄격한 모드에서는 ES6 이전에 사용을 금지해야 합니다.ES6부터 사용할 수 있습니다. 함수의 역할 영역은 이 함수를 설명하는 블록 내부입니다.비엄격한 모드에서는 사용을 금지해야 한다.

if(true) {
    function test() { // 
        console.log(1);
    }
}
test();

대상의 프로토타입 원형을 직접 수정합니다


브라우저는 원형을 최적화하여 실례를 호출하기 전에 대상의 방법을 위해 메모리 위치를 미리 계획합니다.프로토타입 원형을 직접 수정할 수 없습니다.다음 두 가지 방법 모두 사용을 금지해야 한다
Object를 사용합니다.setPrototypeOf 원형 수정

function a(){}
a.prototype = {
  a_prop: "a val"
};
function b(){}
var proto = {
  b_prop: "b val"
};
Object.setPrototypeOf(
  proto, a.prototype
);
b.prototype = proto;
var test = new b;
console.log(test.a_prop); // a val
console.log(test.b_prop); // b val
객체를 직접 수정하는 __proto__ 속성

function a(){}
a.prototype = {
  a_prop: "a val"
};
function b(){}
var proto = {
  b_prop: "b val",
  __proto__: a.prototype //  b   __prototype__  
};
b.prototype = proto;
var test = new b;
console.log(test.a_prop); // a val
console.log(test.b_prop); // b val

with


with 사용법:

var a = {
    p1: 1,
    p2: 2
}
with (a) {
    p1 = 3;
}
console.log(a.p1);
with 사용을 금지해야 합니다. 예를 들면:

function a(arg1, arg2) {
  with (arg2){
    console.log(arg1); //   arg2   arg1  
  }
}
var arg2 = {arg1:1}
a("arg1", arg2)

callee


arguments.callee는 현재 실행 중인 함수를 나타냅니다.

function a(arg1) {
    if (arg1 > 1) {
        return arg1 * arguments.callee(arg1 - 1);
    }
    else {
        return 1;
    }
}
console.log(a(3)); // 6
함수가 자신을 호출해야 할 때,arguments를 사용하는 것을 금지해야 합니다.callee (), 함수 이름을 통해 이 함수를 호출합니다.

function a(arg1) {
    if (arg1 > 1) {
        return arg1 * a(arg1 - 1); //  
    }
    else {
        return 1;
    }
}
console.log(a(3)); // 6

caller


caller는 함수의 호출자를 표시하며 사용을 금지해야 합니다. 이 특성은 표준이 아닙니다.

function a() {
    console.log(a.caller); // function b() { a(); }
}
function b() {
    a();
}
b();

eval


eval()은 전송된 문자열 매개변수를 JavaScript 코드로 실행할 수 있습니다.

eval("var a = 1, b = 2; console.log(a+b)"); // 3
eval 사용 금지.eval은 일반 자바스크립트보다 느리게 실행됩니다. 브라우저가 자바스크립트를 최적화했기 때문입니다.eval 방법도 안전하지 않습니다. 호출자와 같은 권한으로 코드를 실행하고, eval () 이 호출될 때, 그 역할역도 노출되기 때문입니다.Function 으로 대체해야 합니다.

var a = new Function("a", "b", "console.log(a+b)")
a(1,2); // 3
이상은 원생 JS에서 금지해야 할 쓰기 방법에 대한 상세한 내용입니다. 원생 JS에서 금지해야 할 쓰기 방법에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주세요!

좋은 웹페이지 즐겨찾기