ES6의 화살표 기능과 범위 이해
ES6의 많은 새로운 기능 중에서 화살표 기능(또는 큰 화살표 기능)은 주목할만한 기능 중 하나입니다. 훌륭하고 멋질 뿐만 아니라 범위를 잘 활용하고 빠르고 편리합니다. 이전에 사용했던 기술을 사용하면 코드가 많이 줄어듭니다... 하지만 화살표 기능이 어떻게 작동하는지 이해하지 못하면 이해하기 어려울 수 있습니다. 이제 실행 환경을 살펴보겠습니다.
직접 배우고 사용해 볼 수 있습니다. 이제 브라우저 콘솔에 샘플 프로그램 코드를 복사하면 됩니다. 이제 Firefox(22+) 개발자 도구를 사용하는 것이 좋습니다. 이제 개발자 도구는 화살표를 지원합니다. 기능이 있으며 Google Chrome을 사용할 수도 있습니다. Google Chrome을 사용하는 경우 다음 두 가지를 수행해야 합니다.
Google Chrome의 주소 표시줄에 about:flags를 입력하고 "Experiential JavaScript 사용"을 찾습니다. 옵션을 선택하고 활성화하세요.- 함수 시작 부분에 use strict를 추가한 다음 Google Chrome에서 화살표 기능을 테스트하세요(팁: Google Chrome v38을 사용하세요. 당시 브라우저 버전에 속았습니다):
-
다행히 앞으로는 점점 더 많은 브라우저가 ES6 기능을 지원할 예정입니다. 이제 모든 준비가 완료되었으므로 계속해서 살펴보겠습니다.
(function(){ "use strict"; // use arrow functions here }());
로그인 후 복사
새로운 주제
모두가 최근 ES6에 관한 주제를 논의하고 있습니다. 화살표 함수에 대해서는 다음과 같습니다. =>
로그인 후 복사
=>
새 구문
토론을 통해 새로운 구문이 탄생했습니다. param => expression
로그인 후 복사
새 구문은 변수에 적용되며 표현식 변수에서 여러 선언이 가능합니다. 다음은 화살표 함수의 사용 패턴:param => expression
// 一个参数对应一个表达式 param => expression;// 例如 x => x+2; // 多个参数对应一个表达式 (param [, param]) => expression; //例如 (x,y) => (x + y); // 一个参数对应多个表示式 param => {statements;} //例如 x = > { x++; return x;}; // 多个参数对应多个表达式 ([param] [, param]) => {statements} // 例如 (x,y) => { x++;y++;return x*y;}; //表达式里没有参数 () => expression; //例如var flag = (() => 2)(); flag等于2 () => {statements;} //例如 var flag = (() => {return 1;})(); flag就等于1 //传入一个表达式,返回一个对象 ([param]) => ({ key: value }); //例如 var fuc = (x) => ({key:x}) var object = fuc(1); alert(object);//{key:1}
화살표 함수 구현 방법
일반 함수를 화살표 함수로 변환하여 구현할 수 있습니다.
// 当前函数 var func = function (param) { return param.split(" "); } // 利用箭头函数实现 var func = param => param.split(" ");
위의 예에서 화살표 함수의 구문을 볼 수 있습니다. 실제로 함수 본문과 매개변수가 있는 새 함수를 반환합니다.
func("Felipe Moura"); // returns ["Felipe", "Moura"]
즉시 실행 함수(IIFE)
즉시 실행 함수에서 화살표 함수를 사용할 수 있습니다. 예를 들면 다음과 같습니다. ( x => x * 2 )( 3 ); // 6
로그인 후 복사
이 코드 줄은 임시 함수, 이 함수는 형식 매개변수 x를 가지며 함수의 반환 값은 x*2입니다. 시스템은 이 임시 함수를 즉시 실행하고 형식 매개변수에 3을 할당합니다. 코드 상황: ( x => x * 2 )( 3 ); // 6
( (x, y) => { x = x * 2; return x + y; })( 3, "A" ); // "6A"
관련 생각
다음 함수를 고려해보세요:var func = x => {
return x++;
};
로그인 후 복사몇 가지 일반적인 문제를 나열했습니다:
화살표 함수로 생성된 임시 함수의 인수가 설정되지 않습니다:var func = x => { return x++; };
console.log(arguments); // not defined
임시 함수도 정상적으로 확인할 수 있습니다:
func instanceof Function; // true typeof func; // function func.constructor == Function; // true
화살표 함수 넣기 괄호 안은 유효하지 않습니다.
// 有效的常规语法 (function (x, y){ x= x * 2; return x + y; } (3, "B") ); // 无效的箭头函数语法 ( (x, y) => { x= x * 2; return x + y; } ( 3, "A" ) ); // 但是可以这样写就是有效的了: ( (x,y) => { x= x * 2;return x + y; } )( 3,"A" );//立即执行函数
화살표 함수는 임시 함수를 생성하지만 이 임시 함수는 생성자가 아닙니다. typeof
和instanceof函
var instance= new func(); // TypeError: func is not a constructor
func.prototype; // undefined
Scope
이 화살표 함수의 범위 엄격 모드가 아닌 경우 this 키워드는 window를 가리키고, 엄격 모드에서는 정의되지 않으며 생성자의 this는 현재 개체 인스턴스를 가리킵니다. , 이것은 객체를 가리킬 수 있습니다. 예를 들어 이벤트 수신 함수를 추가할 때 이 점은 실제로 매우 직접적이지 않을 수 있습니다. 범위 흐름이라는 하나의 규칙에 따라 판단됩니다. 아래에서는 이것이 이벤트 리스너 함수와 객체 함수 내에서 어떻게 나타나는지 보여드리겠습니다. 이벤트 리스너 함수에서: document.body.addEventListener('click', function(evt){
console.log(this); // the HTMLBodyElement itself
});
로그인 후 복사
생성자에서: document.body.addEventListener('click', function(evt){ console.log(this); // the HTMLBodyElement itself });
function Person () { let fullName = null; this.getName = function () { return fullName; }; this.setName = function (name) { fullName = name; return this; }; } let jon = new Person(); jon.setName("Jon Doe"); console.log(jon.getName()); // "Jon Doe" //注:this关键字这里就不解释了,大家自己google,baidu吧。
jon.setName("Jon Doe") .getName(); // "Jon Doe"
let obj = { foo: "bar", getIt: function () { return this.foo; } }; console.log( obj.getIt() ); // "bar"
function Student(data){ this.name = data.name || "Jon Doe"; this.age = data.age>=0 ? data.age : -1; this.getInfo = function () { return this.name + ", " + this.age; }; this.sayHi = function () { window.setTimeout( function () { console.log( this ); }, 100 ); } } let mary = new Student({ name: "Mary Lou", age: 13 }); console.log( mary.getInfo() ); // "Mary Lou, 13" mary.sayHi(); // window
function Student(data){ this.name = data.name || "Jon Doe"; this.age = data.age>=0 ? data.age : -1; this.getInfo = function () { return this.name + ", " + this.age; }; this.sayHi = function () { window.setTimeout( ()=>{ // the only difference is here console.log( this ); }, 100 ); } } let mary = new Student({ name: "Mary Lou", age: 13 }); console.log( mary.getInfo() ); // "Mary Lou, 13" mary.sayHi(); // Object { name: "Mary Lou", age: 13, ... }
분석: sayHi 함수에서는 화살표 함수를 사용합니다. 현재 범위는 화살표 함수입니다. 생성된 임시 함수의 범위는 학생 개체의 sayHi 함수의 범위이기도 합니다. 따라서 setTimeout에서 화살표 함수에 의해 생성된 임시 함수를 호출하더라도 이 임시 함수의 이 함수도 올바르게 가리킵니다.
有趣和有用的使用
创建一个函数很容易,我们可以利用它可以保持作用域的特征:
例如我们可以这么使用:Array.forEach()
var arr = ['a', 'e', 'i', 'o', 'u']; arr.forEach(vowel => { console.log(vowel); });
分析:在forEach里箭头函数会创建并返回一个临时函数 tempFun,这个tempFun你可以想象成这样的:function(vowel){ console.log(vowel);}但是Array.forEach函数会怎么去处理传入的tempFunc呢?在forEach函数里会这样调用它:tempFunc.call(this,value);所有我们看到函数的正确执行效果。
//在Array.map里使用箭头函数,这里我就不分析函数执行过程了。。。。 var arr = ['a', 'e', 'i', 'o', 'u']; arr.map(vowel => { return vowel.toUpperCase(); }); // [ "A", "E", "I", "O", "U" ]
费布拉奇数列
var factorial = (n) => { if(n==0) { return 1; } return (n * factorial (n-1) ); } factorial(6); // 720
我们也可以用在Array.sort方法里:
let arr = ['a', 'e', 'i', 'o', 'u']; arr.sort( (a, b)=> a < b? 1: -1 );
也可以在事件监听函数里使用:
// EventObject, BodyElement document.body.addEventListener('click', event=>console.log(event, this));
推荐的链接
下面列出了一系列有用的链接,大家可以去看一看
总结
尽管大家可能会认为使用箭头函数会降低你代码的可读性,但是由于它对作用域的特殊处理,它能让我们能很好的处理this的指向问题。箭头函数加上let关键字的使用,将会让我们JavaScript代码上一个层次!尽量多使用箭头函数,你可以再你的浏览器测试你写的箭头函数代码,大家可以再评论区留下你对箭头函数的想法和使用方案!我希望大家能享受这篇文章,就像你会不就的将来享受箭头函数带给你的快乐.
相关免费学习推荐:js视频教程
更多编程相关知识,请访问:编程入门!!
위 내용은 ES6의 화살표 기능과 범위 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 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)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
