평가판과 새로운 기능은 동일하지 않습니다_javascript技巧
1. 함수 선언
function foo(){
//code
}
JS에서는 함수도 객체이고, 함수 객체는 Function.prototype에 연결됩니다(Function.prototype은 Object.prototype에 연결됩니다)
2. 함수 리터럴 Formula
var foo = function foo(){
//code
}
객체에는 프로토타입 객체에 대한 숨겨진 연결이 있습니다. 객체 리터럴에 의해 생성된 객체는 Object.prototype에 연결됩니다. foo.__proto__ == Function.prototype
3. New 생성자를 사용하여
new 함수([arg1[, arg2[, ... argN]],] functionBody)를 생성합니다. 🎜>실행될 때마다 새로운 함수 생성
이 세 가지 모드를 소개하는 온라인 자료가 많이 있습니다. 처음 두 모드는 동일한 어휘 범위를 기반으로 거의 동일합니다.
어휘 범위: 변수의 범위는 실행될 때가 아니라 정의될 때 결정됩니다. 즉, 어휘 범위는 소스 코드에 따라 달라지므로 정적 분석을 통해 결정할 수 있습니다. 어휘 범위는 정적 범위라고도 합니다. with와 eval을 제외하면 JS의 범위 메커니즘은 어휘 범위(Lexical Scope)에 매우 가깝다고 할 수 있습니다.
갑자기 주제에서 벗어난 것 같습니다. 이 기사는 실제로 eval과 New Function의 차이점을 기록하고 있습니다. 주제로 돌아가 보겠습니다.
어떤 사람들은 new Function 메서드가 거의 같다고 말했습니다. eval.. 오늘 확인해 보니 정말 뭔가 다르다는 걸 깨달았습니다. 이 말을 한 사람은 정말 무책임한 사람이었습니다. eval 및 new 기능과 관련하여 얻은 결과는 동일하므로 사용하지 말라고 합니다. 그래서 결론은 "필요하다면" 사용하는 것입니다.
eval()은 현재 실행 범위 내에서 문자열을 JavaScript 표현식으로 평가하고 로컬 변수에 액세스할 수 있습니다.
new Function()은 문자열에 저장된 JavaScript 코드를 함수 객체로 구문 분석합니다. 코드가 별도의 범위에서 실행되기 때문에 로컬 변수에 접근할 수 없습니다.
위의 2가지 점을 보면 eval의 범위는 현재 범위이고, new 함수는 동적으로 생성되며 해당 범위를 알 수 있습니다. 항상 그들은 모두 창문입니다. 게다가 eval은 지역 변수를 읽을 수 있지만 new Function은 읽을 수 없습니다.
eval('(a = 22)'); //new Function('return (a = 22);')();
alert(a); // 경고 22
}
따라서 일반적으로 eval은 JSON 개체를 변환하는 데만 사용되며 new Function에도 특별한 용도가 있지만 다음과 같은 경우에는 여전히 사용됩니다. 덜 사용하는 것이 좋습니다.
추가 정보: 사악한 평가 및 새로운 기능
여기에 백업하십시오:
코드:
'alert("hello")'.replace(/./, function(m){new Function(m)();}); 🎜> var i = 0; eval(new Array(101).join('alert( i);'))
var i = 0; new Function(new Array(101).join('alert( i );'))();

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











eval은 "평가"를 의미하며 문자열 표현식을 실행하고 표현식의 계산 결과를 반환하는 데 사용되는 Python의 내장 함수입니다. 즉, 변수를 할당할 때 등호 오른쪽의 표현은 다음과 같습니다. 문자열 형식으로 작성되며, 반환 값은 이 표현식의 결과입니다. 구문 "eval(표현식[, 전역[, 지역]])".

win에서 PHP에서 평가를 비활성화하는 방법: 1. "PHP_diseval_extension"을 다운로드합니다. 2. 현재 서버에서 사용되는 PHP를 찾습니다. 3. PHP 구성 파일을 엽니다. 4. "extension=diseval.so" 코드를 추가합니다. 서비스를 다시 시작하십시오.

Python에서는 eval() 함수를 사용하여 문자열 표현식을 실행하고 그 결과를 반환합니다. 표현식이 포함된 문자열을 매개변수로 사용하여 표현식을 평가합니다. eval() 함수는 강력하지만 문자열에 포함된 유효한 Python 표현식을 모두 실행한다는 점에 유의해야 합니다. 따라서 보안 취약성을 방지하려면 이 함수를 사용할 때 외부 입력 문자열을 허용하지 않아야 합니다.

eval은 문자열을 코드로 구문 분석 및 실행하고 실행 결과를 반환하는 데 사용되는 Python의 내장 함수입니다. "eval" 함수는 임의의 Python 코드를 실행할 수 있으므로 "eval" 함수를 사용할 때는 보안 문제를 신중하게 고려해야 합니다. "eval" 함수에 신뢰할 수 없는 문자열을 전달하면 코드 삽입과 같은 보안 문제가 발생할 수 있습니다. .

Python의 eval() 내장된 Pythoneval()[1]을 사용하여 문자열 기반 또는 컴파일된 코드 기반 입력에서 표현식을 동적으로 평가할 수 있습니다. eval()에 문자열을 전달하면 함수는 이를 구문 분석하고 바이트코드[2]로 컴파일한 다음 Python 표현식으로 평가합니다. 그러나 컴파일된 코드 객체로 eval()을 호출하면 함수는 계산 단계만 수행하므로 동일한 입력으로 eval()을 여러 번 호출하면 매우 편리합니다. Python의 eval()은 다음과 같이 정의됩니다. eval(expression[,globals[,locals]]) 이 함수

1. 개념 Java 언어에서 "new" 표현식은 인스턴스를 생성하는 역할을 하며 생성자가 인스턴스를 초기화하기 위해 호출됩니다. 생성자 자체의 반환 값 유형은 "생성자가 새로 생성된 값을 반환합니다." 개체 참조"이지만 새 표현식의 값은 새로 생성된 개체에 대한 참조입니다. 2. 목적: 새 클래스의 객체를 생성합니다. 3. 작동 메커니즘: 객체 멤버에 대한 메모리 공간을 할당하고, 멤버 변수를 명시적으로 초기화하고, 생성 방법 계산을 수행하고, 참조 값을 자주 반환합니다. 메모리에서 새로운 메모리를 여는 것을 의미합니다. 메모리 공간은 메모리의 힙 영역에 할당되며 jvm에 의해 제어되며 자동으로 메모리를 관리합니다. 여기서는 String 클래스를 예로 사용합니다. 푸

차이점: 1. Make는 Slice, Map 및 chan 유형의 데이터를 할당하고 초기화하는 데만 사용할 수 있는 반면 new는 모든 유형의 데이터를 할당할 수 있습니다. 2. 새 할당은 "*Type" 유형인 포인터를 반환하고 make는 유형인 참조를 반환합니다. 3. new에 의해 할당된 공간은 지워집니다. make가 공간을 할당한 후에는 초기화됩니다.
