웹 프론트엔드 JS 튜토리얼 평가판과 새로운 기능은 동일하지 않습니다_javascript技巧

평가판과 새로운 기능은 동일하지 않습니다_javascript技巧

May 16, 2016 pm 05:45 PM
eval new

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은 읽을 수 없습니다.


function test() {
var a = 11 ;
eval('(a = 22)'); //new Function('return (a = 22);')();
alert(a); // 경고 22
}


따라서 일반적으로 eval은 JSON 개체를 변환하는 데만 사용되며 new Function에도 특별한 용도가 있지만 다음과 같은 경우에는 여전히 사용됩니다. 덜 사용하는 것이 좋습니다.

추가 정보: 사악한 평가 및 새로운 기능

여기에 백업하십시오:

코드:


// 주의 사항: 손가락의 안전을 위해
'alert("hello")'를 실행하세요. Chrome에서 .replace(/. /, eval)
'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 );'))();
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

파이썬에서 eval은 무엇을 의미합니까? 파이썬에서 eval은 무엇을 의미합니까? May 22, 2019 pm 03:18 PM

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

Win에서 PHP에서 평가를 비활성화하는 방법 Win에서 PHP에서 평가를 비활성화하는 방법 Oct 31, 2022 am 09:33 AM

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

Python에서 eval 사용법에 대한 간단한 설명 Python에서 eval 사용법에 대한 간단한 설명 Mar 25, 2024 pm 02:08 PM

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

파이썬에서 eval은 무엇입니까? 파이썬에서 eval은 무엇입니까? Aug 08, 2023 pm 05:07 PM

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

Python 평가 함수를 사용하는 방법 Python 평가 함수를 사용하는 방법 Jun 04, 2023 am 09:19 AM

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

Java에서 new 키워드를 사용하는 방법 Java에서 new 키워드를 사용하는 방법 May 03, 2023 pm 10:16 PM

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

Go 언어에서 make와 new의 차이점은 무엇입니까 Go 언어에서 make와 new의 차이점은 무엇입니까 Jan 09, 2023 am 11:44 AM

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

See all articles