if
JavaScript의 기능은 일류 시민으로 취급되므로 변수에 저장되고 매개 변수로 전달되며 다른 기능에 의해 반환되며 객체와 같은 속성이 있습니다. for
JavaScript의 명령문 (동적 범위 변수)은 런타임 오류를 유발할 수 있고 본질적으로 혼란스러워서 더 이상 사용되지 않았습니다. with
스코프 블록 레벨 범위를 합리적으로 기대할 것입니다. 불행히도 이것은 그렇지 않습니다. 첫째, JavaScript에서 가변 범위는 괄호가 아닌 함수에 의해 결정됩니다. 다시 말해서, 신체가 새로운 범위를 만들지 않는 경우, 신체에 선언 된 변수는 실제로 홍보됩니다. 둘째, 진술의 존재는 JavaScrip 스코프가 동적이되도록하며 런타임까지 결정할 수 없습니다. with
진술의 사용이 더 이상 사용되지 않았다는 사실에 놀라지 않을 수 있습니다. 가없는 javaScript는 실제로 어휘 스코프 언어가 될 것입니다. 즉, 코드를 보면 범위를 완전히 결정할 수 있습니다. 공식적으로 JavaScript에서는 범위를 높이는 4 가지 방법이 있습니다 .- 언어 정의 : 기본적으로 모든 스코프에는 이름 with
및 가 포함됩니다. - 공식 매개 변수 : 함수에 대해 선언 된 모든 (공식) 매개 변수의 범위는 함수의 본문에 속합니다. - 기능 선언. - 변수 선언. with
this
키워드에서 선언되지 않은 (암시 적으로) 변수 할당의 암시 적 범위에 의해 발생합니다. 이 광기는 명시 적 바인딩없이 함수를 호출 할 때 (다음 섹션에서 더) 글로벌 범위를 arguments
참조로 암시 적으로 할당합니다. 세부 사항을 파헤 치기 전에 혼란을 피하기 위해 어떤 좋은 패턴을 사용할 수 있는지 명확히 해보자 해당 블록 내에서 기능의 선언 및 IF 블록 내에서 및 IF IF 선언 (이것은 다른 이유로이 기사의 범위를 벗어납니다).
고도
고도는 진술의 실제 행동을 설명하기위한 단순화 된 방법입니다. 프로모션 된 변수는 포함 된 함수의 시작 부분에서 선언되며 의 실제 값을 인쇄하며, 이는
문. 다음 코드를 고려하십시오
ECMAScript 6에서
함수
함수 요약
닫는
는 의 폐쇄에 남아 있으므로 신체 내부에 접근 할 수 있습니다. 다시
이 기사에서는 다른 언어, 특히 Java 및 C의 개발자가 종종 오해하는 JavaScript의 세 가지 기능을 소개합니다. 특히, 우리는 범위, 홍보, 기능 및 폐쇄와 같은 개념에 대해 논의합니다. 이 주제를 파헤치려면 다음은 다음과 같이 읽을 수있는 몇 가지 기사 목록입니다 .- JavaScript의 범위 - 함수 선언 및 기능 표현 - 문 및 .
JavaScript 기능 (FAQ)에 대한 FAQ
JavaScript의"이 "키워드는 무엇입니까?
JavaScript에서 객체와 배열은 데이터를 저장하는 데 사용되지만 다른 방식으로 저장됩니다. 객체는 각 속성이 키 값 쌍인 속성 모음입니다. 키는 문자열이며 값은 모든 데이터 유형 일 수 있습니다. 배열은 항목 목록을 나타내는 특수 유형의 객체입니다. 키는 숫자 인덱스이며 값은 모든 데이터 유형 일 수 있습니다. var
로 초기화됩니다. 그런 다음 과제는 원래 선언의 실제 줄에서 발생합니다. 다음 예를 참조하십시오 :
this
<code class="language-css">table.sp_table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
}
table.sp_table td, table.sp_table th {
border: solid 1px #ccc;
padding: 10px;
line-height: 1.5;
text-align: center;
width: 20%;
}
table.sp_table tr td:first-child {
font-weight: bold;
}</code>
블록에서 명령문은 변수 명령문은 변수 if
로 초기화됩니다. var
지시를 함수의 첫 번째 줄로 사용하여 테스트 할 수 있습니다. 엄격한 모드에서는 변수를 사용하기 전에 선언해야하지만 JavaScript 엔진이 선언으로 인해 오류를보고하지 않는지 확인할 수 있습니다. 그건 그렇고, i
재고로 인해 오류를보고하지 않을 것입니다. 그러한 오류를 잡으려면 Jshint 또는 JSlint와 같은 Linter를 사용하여 코드를 처리하는 것이 좋습니다. 이제 변수 선언의 다른 오류가 발생하기 쉬운 사용법을 강조하기 위해 다른 예를 살펴 보겠습니다.
console.log
i
undefined
라는 변수의 로컬 사본이 함수 내부에서 선언되기 때문에 본문이 실행되며 에 의해 홍보됩니다. 유형의 필수 작업도 여기에서도 작동합니다. "use strict";
var
<code class="language-javascript">function myFunction() {
console.log(i);
var i = 0;
console.log(i);
if (true) {
var i = 5;
console.log(i);
}
console.log(i);
}</code>
도 홍보됩니다. 이 주제는 여기보다 더 신중하게 처리되어야하지만, 요소는 선언이 범위의 시작 부분으로 이동한다는 점을 제외하고는 함수 표현과 거의 동일하게 행동합니다. 기능 선언의 동작을 보여주는 다음 예를 고려하십시오.
if
test()
notNull
에 라는 필드가 있으면 는 를 반환하고, 그렇지 않으면 123이 반환됩니다. 이 코딩 실무는 런타임 오류의 원인 일 수 있으므로 문을 피하는 것이 좋습니다.
ecmascript 6 사양은 블록 레벨 범위를 추가하기 위해 다섯 번째 메소드를 추가합니다 : <code>undefined
0
5
5</code>
위 코드에서는 변수 및
<code class="language-javascript">var notNull = 1;
function test() {
if (!notNull) {
console.log("Null-ish, so far", notNull);
for(var notNull = 10; notNull < 20; notNull++) {
//..
}
console.log("Now it's not null", notNull);
}
console.log(notNull);
}</code>
에 대한 지원이 제한적입니다.
特性
Java
Python
JavaScript
警告
作用域
词法(块)
词法(函数、类或模块)
是
它与 Java 或 C 的工作方式大相径庭
块作用域
是
否
let
关键字(ES6)再一次警告:这不是 Java!
提升
不可能!
否
是
仅提升变量和函数表达式的声明。对于函数声明,也会提升定义
函数
作为内置类型
是
是
回调/命令模式对象(或 Java 8 的 lambda)
动态创建
否
否
eval
– Function
对象
eval
存在安全问题,Function
对象可能无法按预期工作
属性
否
否
可以具有属性
无法限制对函数属性的访问
闭包
弱化,只读,在匿名内部类中
弱化,只读,在嵌套的 def 中
是
内存泄漏
객체
<code class="language-css">table.sp_table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
}
table.sp_table td, table.sp_table th {
border: solid 1px #ccc;
padding: 10px;
line-height: 1.5;
text-align: center;
width: 20%;
}
table.sp_table tr td:first-child {
font-weight: bold;
}</code>
가 할당 될 때 makeCounter()
counter
함수를 업데이트하여 매개 변수를 수락 할 수 있습니다.
makeCounter()
외부 기능 매개 변수도 폐쇄에 저장되므로 이번에는 로컬 변수를 선언 할 필요가 없습니다. 각 통화 i
이 패턴을 사용하여 클로저를 사용하여 속성 이름에 대한 래퍼를 만들고 자체 세터와 게터를 사용할 수 있습니다. ES5는 getters and setter를 사용하여 속성에 대한 객체를 만들 수 있고 최고의 곡물에서 특성 자체에 대한 액세스를 제어 할 수 있기 때문에 훨씬 쉽게 만듭니다. displayCounter
결론
特性
Java
Python
JavaScript
警告
闭包
弱化,只读,在匿名内部类中
弱化,只读,在嵌套的 def 中
是
内存泄漏
记忆化模式
必须使用共享对象
可以使用列表或字典
是
最好使用惰性求值
命名空间/模块模式
不需要
不需要
是
私有属性模式
不需要
不可能
是
可能令人困惑
let
JavaScript에서 "=="및 "==="는 비교 연산자이지만 다르게 작동합니다. "=="연산자를 느슨한 평등 연산자라고합니다. 필요한 유형 변환을 수행 한 후 두 값이 동일한지 여부를 비교합니다. 즉, 숫자를 숫자를 가진 문자열과 비교하면 true가 반환됩니다. 예를 들어, "5"== 5는 true를 반환합니다. 반면에 "==="는 엄격한 평등 연산자입니다. 유형 변환을 수행하지 않으므로 두 값 유형이 다르면 False를 반환합니다. 예를 들어, "5"=== 5는 문자열이고 다른 하나는 숫자이기 때문에 false를 반환합니다. let
고도는 변수와 함수 선언을 컴파일 단계에서 포함 된 범위의 상단으로 이동시키는 자바 스크립트의 메커니즘입니다. 이는 변수와 함수를 선언하기 전에 변수와 함수를 사용할 수 있음을 의미합니다. 그러나 선언 만 홍보되며 초기화는 홍보되지 않습니다. 변수를 사용한 후에 변수가 선언되고 초기화되면 값은 정의되지 않습니다.
JavaScript에서 변수는 글로벌 또는 로컬 변수 일 수 있습니다. 글로벌 변수는 기능 외부에서 선언 된 변수이거나 "var"키워드로 선언 된 변수입니다. 스크립트의 모든 함수에서 액세스 할 수 있습니다. 반면에 로컬 변수는 "var"키워드를 사용하여 함수 내에서 선언 된 변수입니다. 선언하는 함수 내에서만 액세스 할 수 있습니다.
JavaScript에서 함수는 특정 작업을 수행하도록 설계된 코드 블록이며 필요에 따라 사용할 수있는 별도의 엔티티입니다. 반면에, 메소드는 객체와 관련된 함수, 즉 메소드는 객체의 특성입니다. 메소드는 객체의 속성으로 값을 할당해야한다는 점을 제외하고는 일반 함수와 동일한 방식으로 정의됩니다.
위 내용은 Java/C 개발자가 알아야 할 3 개의 JavaScript 기발함의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!