Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
30·ÖÖÓES6´ÓİÉúµ½ÊìϤ
 
  1890  次浏览      27
  2019-6-3
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ô²®ÀÖÔÚÏߣ¬±¾Îļòµ¥½éÉܼ¸¸öES6ºËÐĸÅÄî,Ϊʲô»á²úÉúES6Õâ´Î¸üеÄÔ­Òò¡ª¡ª±àд¸´ÔӵĴóÐÍÓ¦ÓóÌÐò¡£

ǰÑÔ

ECMAScript 6.0£¨ÒÔϼò³Æ ES6£©ÊÇ JavaScript ÓïÑÔµÄÏÂÒ»´ú±ê×¼£¬ÒѾ­ÔÚ 2015 Äê 6 ÔÂÕýʽ·¢²¼ÁË¡£ËüµÄÄ¿±ê£¬ÊÇʹµÃ JavaScript ÓïÑÔ¿ÉÒÔÓÃÀ´±àд¸´ÔӵĴóÐÍÓ¦ÓóÌÐò£¬³ÉΪÆóÒµ¼¶¿ª·¢ÓïÑÔ¡£

»Ø¹Ë½üÁ½ÄêµÄǰ¶Ë¿ª·¢£¬¸´ÔÓ¶ÈȷʵÔÚ¿ìËÙÔö¼Ó£¬½üÆÚ²»ÂÛ´Óϵͳ¸´ÔÓ¶È»¹Êǵ½Ç°¶Ë¿ª·¢ÈËÔ±ÊýÁ¿Ó¦¸Ã´ïµ½ÁËÒ»¸ö±¥ºÍÖµ£¬»»¸ö·½Ê½Ëµ£¬Ã»ÓÐES6ÎÒÃǵÄǰ¶Ë´úÂëÒÀ¾É¿ÉÒÔдºÜ¶à¸´ÔÓµÄÓ¦Ó㬶øES6µÄÌá³ö¸üºÃµÄ°ïÎÒÃǽâ¾öÁ˺ܶàÀúÊ·ÒÅÁôÎÊÌ⣬ÁíÒ»¸ö½Ç¶ÈES6ÈÃJS¸üÊʺϿª·¢´óÐÍÓ¦Ó㬶ø²»ÓÃÒýÓÃÌ«¶àµÄ¿âÁË¡£

³ýÁËÈîÀÏʦµÄÎÄÕ»¹²Î¿¼£ºhttp://www.infoq.com/cn/articles/es6-in-depth-arrow-functions

PS£ºÎÄÖÐÖ»ÊǸöÈ˸ÐÎò£¬ÓÐÎóÇëÔÚÆÀÂÛÌá³ö

Ä£¿éModuleµÄÒýÈë

¶¼ËµÁ˸´ÔӵĴóÐÍÓ¦ÓÃÁË£¬ËùÒÔÎÒÃǵÚÒ»¸öÒªÌÖÂÛµÄÖØÒªÌØÐÔ¾ÍÊÇÄ£¿é¸ÅÄÎÒÃÇ×öÒ»¸ö¸´ÔÓµÄÏîÄ¿±Ø¶¨ÐèÒªÁ½²½×ߣº

¢Ù ·ÖµÃ¿ª£¬²¢ÇÒÐèÒª·Ö¿ª

¢Ú ºÏµÃÆðÀ´

ÎÒÃÇÆÕ±éÈÏΪûÓи´ÔÓµÄÓ¦Óã¬Ö»Óзֲ»¿ªµÄÓ¦Óã¬ÔÙ¸´ÔÓµÄÓ¦Óã¬Ò»µ©¿ÉÒÔʹÓÃ×é¼þ»¯¡¢Ä£¿é»¯µÄ·½Ê½·Ö³É²»Í¬µÄСµ¥Ôª£¬ÄÇôÆäÄѶȱã»á´ó´ó½µµÍ£¬Ä£¿é»¯ÊÇ´óÐÍ¡¢¸´ÔÓÏîÄ¿µÄÖ÷ÒªÀ¹Â·»¢¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÉçÇøÖÆ¶¨ÁËһЩģ¿é¼ÓÔØ·½°¸£¬¶ÔÓÚä¯ÀÀÆ÷¿ª·¢À´Ëµ£¬ÎÒÃÇÓõÄ×î¶àµÄÊÇAMD¹æ·¶£¬Ò²¾ÍÊÇ´ó¼ÒÊìÖªµÄrequireJS£¬¶øES6ÖÐÔÚÓïÒô±ê×¼²ãÃæÊµÏÖÁËÄ£¿é¹¦ÄÜ£¬ÓÃÒÔÈ¡´ú·þÎñ¶ËͨÐŵÄCommonJSºÍAMD¹æ·¶£¬³ÉΪÁËͨÓõĹ淶£¬¶à˵ÎÞÒæ£¬ÎÒÃÇÕâÀïÉÏÒ»¶Î´úÂë˵Ã÷£º

/*
validate.js ¶àÓÃÓÚ±íµ¥ÑéÖ¤
*/
export function isEmail (text) {
var reg = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return reg.test(text);
}

export function isPassword (text) {
var reg = /^[a-zA-Z0-9]{6,20}$/;
return reg.test(text);
}

ÄÇôÎÒÃÇÏÖÔÚÏëÔÚÒ³ÃæÀïÃæÊ¹ÓÃÕâ¸ö¹¤¾ßÀà¸ÃÔõô×öÄØ£º


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- Çë×¢ÒâÕâÀïtype=module²ÅÄÜÔËÐÐ -->
<script type="module">
import {isEmail} from './validate.js';
var e1 = 'dddd';
var e2 = 'yexiaochai@qq.com'
console.log(isEmail(e1))
console.log(isEmail(e2))
</script>
</body>
</html>

ES6ÖеÄModuleÌá³ö£¬ÔÚÎÒÕâÀï¿´À´ÊÇÏëÔÚ¹Ù·½Íê³É֮ǰrequireJS¸ÉµÄ¹¤×÷£¬ÕâÀïÒ²ÓÐһЩ±¾ÖÊÉϵIJ»Ò»Ñù£º

¢Ù requireJSÊÇʹÓüÓÔØscript±êÇ©µÄ·½Ê½ÔØÈëjs£¬Ã»ÓÐʲôÏÞÖÆ

¢Ú importÃüÁî»á±»jsÒýÇæ¾²Ì¬·ÖÎö£¬ÏÈÓÚÄ£¿éÆäËûÓï¾äÖ´ÐÐ

ÒÔÉÏÌØÐÔ»áÖ±½Ó¸øÎÒÃÇ´øÀ´Ò»Ð©À§ÈÅ£¬±ÈÈçÔ­À´ÎÒÃÇÏîÄ¿¿ØÖÆÆ÷»áÓÐÕâôһ¶Î´úÂ룺

var viewId = ''; //ÓÉä¯ÀÀÆ÷»ñÈ¡ÊÔͼid,url¿ÉÄÜΪ?viewId=booking|list|...
//Èç¹û²»´æÔÚÔòÐèÒª¹¹½¨£¬¼Çס¹¹½¨Ê±ÐèҪʹÓÃviewdata¼Ì³ÐÔ´view
requirejs(viewId, function(View) {
//Ö´Ðиù¾Ýurl²ÎÊý¶¯Ì¬¼ÓÔØviewÂß¼­
})

Ç°ÃæËµ¹ýÁË£¬importÃüÁî»á±»jsÒýÇæ¾²Ì¬·ÖÎö£¬ÏÈÓÚÄ£¿éÆäËûÓï¾äÖ´ÐУ¬ËùÒÔÎÒÃÇÔÚ¸ù±¾²»Äܽ«importÖ´ÐÐÖͺ󣬻òÕß¶¯Ì¬»¯£¬×ö²»µ½µÄ£¬ÕâÖÖд·¨Ò²ÊDZ¨´íµÄ£º

if (viewId) {
import view from './' + viewId;
}

ÕâÖÖÉè¼Æ»áÓÐÀûÓÚÌá¸ß±àÒëÆ÷ЧÂÊ£¬µ«ÊÇ֮ǰµÄ¶¯Ì¬ÒµÎñÂß¼­¾Í²»ÖªµÀÈçºÎ¼ÌÐøÁË£¿¶øES6Èç¹ûÌṩimportµÄ·½·¨£¬ÎÒÃDZä¿ÉÒÔÖ´ÐÐÂß¼­£º

import(viewId, function() {
//äÖÈ¾Ò³Ãæ
})

ÊÂʵÉÏËûÒ²ÌṩÁË£º

ÏÖÔÚ¿´ÆðÀ´£¬JSÖеÄÄ£¿é±ãÊ®·ÖÍêÃÀÁË£¬ÖÁÓÚÆäÖÐһЩϸ½Ú£¬±ã¿ÉÒÔÓõ½µÄʱºòÔÙ˵ÁË

ES6ÖеÄClass

ÎÒÃǶÔÎÒÃǵĶ¨Î»Ò»Ö±ÊǷdz£ÇåÎúµÄ£¬ÎÒÃǾÍÊÇÒª¸É´óÏîÄ¿µÄ£¬ÎÒÃÇÊÇÒª¸É¸´ÔÓµÄÏîÄ¿£¬³ýÁËÄ£¿é¸ÅÄÀàµÄ¸ÅÄîÒ²·Ç³£ÖØÒª£¬ÎÒÃÇ֮ǰÓõÄÕâÖÖ·½Ê½ÊµÏÖÒ»¸öÀ࣬ÎÒÃÇÀ´Î¹ʶøÖªÐ¡£

µ±Ò»¸öº¯Êý±»´´½¨Ê±£¬Function¹¹Ô캯Êý²úÉúµÄº¯Êý»áÒþʽµÄ±»¸³ÓèÒ»¸öprototypeÊôÐÔ£¬prototype°üº¬Ò»¸öconstructor¶ÔÏó

¶øconstructor±ãÊǸÃк¯Êý¶ÔÏó£¨constructorÒâÒå²»´ó£¬µ«ÊÇ¿ÉÒÔ°ïÎÒÃÇÕÒµ½¼Ì³Ð¹ØÏµ£©

ÿ¸öº¯Êý¶¼»áÓÐÒ»¸öprototypeÊôÐÔ£¬¸ÃÊôÐÔÖ¸ÏòÁíÒ»¶ÔÏó£¬Õâ¸ö¶ÔÏó°üº¬¿ÉÒÔÓÉÌØ¶¨ÀàÐ͵ÄËùÓÐʵÀý¹²ÏíµÄÊôÐԺͷ½·¨

ÿ´ÎʵÀý»¯ºó£¬ÊµÀýÄÚ²¿¶¼»á°üº¬Ò»¸ö[[prototype]]£¨__proto__£©µÄÄÚ²¿ÊôÐÔ£¬Õâ¸öÊôÐÔÖ¸Ïòprototype

¢Ù ÎÒÃÇͨ¹ýisPrototypeOfÀ´È·¶¨Ä³¸ö¶ÔÏóÊDz»ÊÇÎÒµÄÔ­ÐÍ

¢Ú hasOwnPrototype ¿ÉÒÔ¼ì²âÒ»¸öÊôÐÔÊÇ´æÔÚʵÀýÖл¹ÊÇÔ­ÐÍÖУ¬¸ÃÊôÐÔ²»ÊÇÔ­ÐÍÊôÐԲŷµ»Øtrue

var Person = function (name, age) {
this.name = name;
this.age = age;
};
Person.prototype.getName = function () {
return this.name;
};
var y = new Person('ҶСîÎ', 30);

var Person = function (name, age) {
this.name = name;
this.age = age;
};
Person.prototype.getName = function () {
return this.name;
};
var y = new Person('ҶСîÎ', 30)

ΪÁË·½±ã£¬Ê¹Óã¬ÎÒÃÇ×öÁ˸üΪ¸´Ôӵķâ×°£º

var arr = [];
var slice = arr.slice;

function create() {
if (arguments.length == 0 || arguments.length > 2) throw '²ÎÊý´íÎó';

var parent = null;
//½«²ÎÊýת»»ÎªÊý×é
var properties = slice.call(arguments);

//Èç¹ûµÚÒ»¸ö²ÎÊýΪÀࣨfunction£©£¬ÄÇô¾Í½«Ö®È¡³ö
if (typeof properties[0] === 'function')
parent = properties.shift();
properties = properties[0];

function klass() {
this.initialize.apply(this, arguments);
}

klass.superclass = parent;
klass.subclasses = [];

if (parent) {
var subclass = function () { };
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
parent.subclasses.push(klass);
}

var ancestor = klass.superclass && klass.superclass.prototype;
for (var k in properties) {
var value = properties[k];

//Âú×ãÌõ¼þ¾ÍÖØÐ´
if (ancestor && typeof value == 'function') {
var argslist = /^\s*function\s*\(([^\(\)]*?)\)\s*?\{/i.exec

(value.toString())[1].replace(/\s/i, '').split(',');
//Ö»ÓÐÔÚµÚÒ»¸ö²ÎÊýΪ$superÇé¿öϲÅÐèÒª´¦Àí

£¨ÊÇ·ñ¾ßÓÐÖØ¸´·½·¨ÐèÒªÓû§×Ô¼º¾ö¶¨£©
if (argslist[0] === '$super' && ancestor[k]) {
value = (function (methodName, fn) {
return function () {
var scope = this;
var args = [function () {
return ancestor[methodName].apply(scope, arguments);
} ];
return fn.apply(this, args.concat(slice.call(arguments)));
};
})(k, value);
}
}

klass.prototype[k] = value;
}

if (!klass.prototype.initialize)
klass.prototype.initialize = function () { };

klass.prototype.constructor = klass;

return klass;
}

View Code

ÕâÀïдһ¸ödemo£º

var AbstractView = create({
initialize: function (opts) {
opts = opts || {};
this.wrapper = opts.wrapper || $('body');

//ʼþ¼¯ºÏ
this.events = {};

this.isCreate = false;

},
on: function (type, fn) {
if (!this.events[type]) this.events[type] = [];
this.events[type].push(fn);
},
trigger: function (type) {
if (!this.events[type]) return;
for (var i = 0, len = this.events[type].length; i < len; i++) {
this.events[type][i].call(this)
}
},
createHtml: function () {
throw '±ØÐëÖØÐ´';
},
create: function () {
this.root = $(this.createHtml());
this.wrapper.append(this.root);
this.trigger('onCreate');
this.isCreate = true;
},
show: function () {
if (!this.isCreate) this.create();
this.root.show();
this.trigger('onShow');
},
hide: function () {
this.root.hide();
}
});

var Alert = create(AbstractView, {

createHtml: function () {
return '<div class="alert">ÕâÀïÊÇalert¿ò</div>';
}
});

var AlertTitle = create(Alert, {
initialize: function ($super) {
this.title = '';
$super();

},
createHtml: function () {
return '<div class="alert"><h2>' + this.title + '</h2>ÕâÀïÊÇ´ø±êÌâalert¿ò</div>';
},

setTitle: function (title) {
this.title = title;
this.root.find('h2').html(title)
}

});

var AlertTitleButton = create(AlertTitle, {
initialize: function ($super) {
this.title = '';
$super();

this.on('onShow', function () {
var bt = $('<input type="button" value="µã»÷ÎÒ" />');
bt.click($.proxy(function () {
alert(this.title);
}, this));
this.root.append(bt)
});
}
});

var v1 = new Alert();
v1.show();

var v2 = new AlertTitle();
v2.show();
v2.setTitle('ÎÒÊDZêÌâ');

var v3 = new AlertTitleButton();
v3.show();
v3.setTitle('ÎÒÊDZêÌâºÍ°´Å¥µÄalert');

ES6ÖÐÖ±½Ó´Ó±ê×¼²ãÃæ½â¾öÁËÎÒÃǵÄÎÊÌ⣬ËûÌá³öÁËClass¹Ø¼ü´ÊÈÃÎÒÃÇ¿ÉÒÔ¸üºÃµÄ¶¨ÒåÀ࣬ÎÒÃÇÕâÀïÓÃÎÒÃÇES6µÄÄ£¿éÓï·¨ÖØÐÂʵÏÖÒ»´Î£º

export class AbstractView {
constructor(opts) {
opts = opts || {};
this.wrapper = opts.wrapper || $('body');
//ʼþ¼¯ºÏ
this.events = {};
this.isCreate = false;
}
on(type, fn) {
if (!this.events[type]) this.events[type] = [];
this.events[type].push(fn);
}
trigger(type) {
if (!this.events[type]) return;
for (var i = 0, len = this.events[type].length; i < len; i++) {
this.events[type][i].call(this)
}
}
createHtml() {
throw '±ØÐëÖØÐ´';
}
create() {
this.root = $(this.createHtml());
this.wrapper.append(this.root);
this.trigger('onCreate');
this.isCreate = true;
}
show() {
if (!this.isCreate) this.create();
this.root.show();
this.trigger('onShow');
}
hide() {
this.root.hide();
}
}
export class Alert extends AbstractView {
createHtml() {
return '<div class="alert">ÕâÀïÊÇalert¿ò</div>';
}
}
export class AlertTitle extends Alert {
constructor(opts) {
super(opts);
this.title = '';
}
createHtml() {
return '<div class="alert"><h2>' + this.title + '</h2>ÕâÀïÊÇ´ø±êÌâalert¿ò</div>';
}
setTitle(title) {
this.title = title;
this.root.find('h2').html(title)
}
}
export class AlertTitleButton extends AlertTitle {
constructor(opts) {
super(opts);
this.on('onShow', function () {
var bt = $('<input type="button" value="µã»÷ÎÒ" />');
bt.click($.proxy(function () {
alert(this.title);
}, this));
this.root.append(bt)
});
}
}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript" src="zepto.js"></script>

<!-- Çë×¢ÒâÕâÀïtype=module²ÅÄÜÔËÐÐ -->
<script type="module">
import {Alert, AlertTitle, AlertTitleButton} from './es6class.js';
var v1 = new Alert();
v1.show();
var v2 = new AlertTitle();
v2.show();
v2.setTitle('ÎÒÊDZêÌâ');
var v3 = new AlertTitleButton();
v3.show();
v3.setTitle('ÎÒÊDZêÌâºÍ°´Å¥µÄalert');
</script>
</body>
</html>

ÕâÀïµÄ´úÂëÍê³ÉÁËÓëÉÏÃæÒ»ÑùµÄ¹¦ÄÜ£¬¶ø´úÂë¸ü¼ÓµÄÇåˬÁË¡£

ES6Öеĺ¯Êý

ÎÒÃÇÕâÀïѧϰES6£¬ÓÉ´óµ½Ð¡£¬Ê×ÏÈÌÖÂÛÄ£¿é£¬Æä´ÎÌÖÂÛÀ࣬Õâ¸öʱºòÀíËùµ±È»µ½ÁËÎÒÃǵĺ¯ÊýÁË£¬ES6Öк¯ÊýÒ²¶àÁ˺ܶàÐÂÌØÐÔ»òÕß˵Óï·¨Ìǰɣ¬Ê×ÏÈÎÒÃÇÀ´ËµÒ»ÏÂÕâÀïµÄ¼ýÍ·º¯Êý

¼ýÍ·º¯Êý

//ES5
$('#bt').click(function (e) {
//doing something
})
//ES6
$('#bt').click(e => {
//doing something
})

ÓеãÓï·¨Ìǵĸоõ£¬ÓÐÒ»¸öºÜ´ó²»Í¬µÄÊÇ£¬¼ýÍ·º¯Êý²»¾ßÓÐthisÊôÐÔ£¬¼ýÍ·º¯ÊýÖ±½ÓʹÓõÄÊÇÍⲿµÄthisµÄ×÷ÓÃÓò£¬Õâ¸öÏë²»ÏëÓÿ´¸öÈËϰ¹ß°É¡£

²ÎÊýÐÂÌØÐÔ

ES6¿ÉÒÔΪ²ÎÊýÌṩĬÈÏÊôÐÔ

function log(x, y = 'World') {
console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

ÖÁÓÚ²»¶¨²ÎÊýÈöµÄ£¬ÎÒÕâÀïûÓжà¹ý¶àµÄʹÓ㬵ÈÏîÄ¿Óöµ½ÔÙ˵°É£¬Èç¹ûÑо¿µÄ̫ϸË飬·´¶ø²»ÊʺÏÎÒÃÇ¿ªÕ¹¹¤×÷¡£

let¡¢constºÍvar

֮ǰµÄjsÊÀ½çÀÎÒÃǶ¨Òå±äÁ¿¶¼ÊÇʹÓõÄvar£¬±ð˵»¹ÕæÍ¦ºÃÓõģ¬ËäÓлáÓÐһЩÎÊÌ⣬µ«ÊǶÔÓÚÊìϤjsÌØÐÔµÄС»ï°é¶¼ÄܺܺõĽâ¾ö£¬Ò»°ã¼Çס£º±äÁ¿ÌáÉý»á½â¾ö¾ø´ó¶àÊýÎÊÌâ¡£

¾ÍÄܽâ¾öºÜ¶àÎÊÌ⣬¶øÇÒÕæÊµÏîÄ¿ÖУ¬ÎÒÃÇ»á»á±ÜÃâ³öÏÖ±äÁ¿³öÏÖÖØÃûµÄÇé¿öËùÒÔÓÐʱºò´ó¼ÒÃæÊÔÌâÖп´µ½µÄ³¡¾°ÔÚʵ¼Ê¹¤×÷ÖкÜÉÙ·¢Éú£¬Ö»Òª²»¿ÌÒâÒÜÏë¡¢ÖÆÔìһЩÄÑÒÔÅжϵij¡¾°£¬Æäʵ²¢²»»á³öÏÖ¶àÉÙBUG£¬²»ÄÜÒòΪÏ뿼²ìÈ˼ҶÔÓïÑÔÌØÐÔµÄÁ˽⣬¾Í×öһЩÈÝÒ×ÈÝÒ×ÍüµôµÄÏÝÚåÌâ¡£

ÎÞÂÛÈçºÎ£¬var ÉùÃ÷µÄ±äÁ¿Êܵ½ÁËÒ»¶¨Ú¸²¡£¬ÊÂʵÉÏÔÚÇ¿ÀàÐÍÓïÑÔ¿´À´Ò²È·ÊµÊÇÉè¼ÆBUG£¬µ«ÊÇÍêÈ«·ÏÆúvarµÄʹÓÃÏÔÈ»²»ÊÇjs¸Ã×öµÄÊÂÇ飬ÕâÖÖÇé¿öϳöÏÖÁËlet¹Ø¼ü´Ê¡£

letÓëvarÒ»ÖÂÓÃÒÔÉùÃ÷±äÁ¿£¬²¢ÇÒÒ»ÇÐÓÃvarµÄµØ·½¶¼¿ÉÒÔʹÓÃletÌæ»»£¬Ðµıê×¼Ò²½¨Òé´ó¼Ò²»ÒªÔÙʹÓÃvarÁË£¬let¾ßÓиüºÃµÄ×÷ÓÃÓò¹æÔò£¬Ò²ÐíÕâ¸ö¹æÔòÊDZ߽ç¸ü¼ÓÇåÎúÁË£º

{
let a = 10;
var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

ÕâÀïÊÇÒ»¸ö¾­µäµÄ±Õ°üÎÊÌ⣺

var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10

ÒòΪiÔÚÈ«¾Ö·¶Î§ÓÐЧ£¬¹²Ïíͬһ¸ö×÷ÓÃÓò£¬ËùÒÔi¾ÍÖ»ÓÐ10ÁË£¬ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇ֮ǰ»áÒýÈë±Õ°ü£¬²úÉúеÄ×÷ÓÃÓò¿Õ¼ä£¨ºÃÏñѧÃûÊDZäÁ¿¶ÔÏó£¬ÎÒ¸øÍüÁË£©£¬µ«ÊÇÄÇÀïµÄi¸úÕâÀïµÄiÒѾ­²»ÊÇÒ»¸ö¶«Î÷ÁË£¬µ«Èç¹û½«var¸Ä³Élet£¬ÉÏÃæµÄ´ð°¸ÊÇ·ûºÏÔ¤ÆÚµÄ¡£¿ÉÒÔ¼òµ¥Àí½âΪÿһ´Î¡°{}¡±£¬let¶¨ÒåµÄ±äÁ¿¶¼»á²úÉúеÄ×÷ÓÃÓò¿Õ¼ä£¬ÕâÀï²úÉúÁËÑ­»·£¬ËùÒÔÿһ´Î¶¼²»Ò»Ñù£¬ÕâÀïÓë±Õ°üÓеãÀàËÆÊÇ¿ª±ÙÁ˲»Í¬µÄ¿Õ¼ä¡£

for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc

ÕâÀïÒòΪÄÚ²¿ÖØÐÂÉùÃ÷ÁËi£¬ÊÂʵÉϲúÉúÁË3¸ö×÷ÓÃÓò£¬ÕâÀïÒ»¹²ÓÐ4¸ö×÷ÓÃÓòÖ¸Ïò£¬let×î´óµÄ×÷ÓþÍÊÇjsÖп鼶×÷ÓÃÓòµÄ´æÔÚ£¬²¢ÇÒÄÚ²¿µÄ±äÁ¿²»»á±»ÍⲿËù·ÃÎÊ£¬ËùÒÔ֮ǰΪÁË·ÀÖ¹±äÁ¿ÎêÈèµÄÁ¢¼´Ö´Ðк¯Êý£¬Ëƺõ±äµÃ²»ÊÇÄÇô±ØÒªÁË¡£

֮ǰÎÒÃǶ¨ÒåÒ»¸ö³£Á¿»á²ÉÓÃÈ«²¿´óдµÄ·½Ê½£º

var NUM = 10;

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ES6ÒýÈëÁËconstÃüÁÈÃÎÒÃǶ¨ÒåÖ»¶Á³£Á¿£¬ÕâÀï²»¶Ôϸ½Ú×ö¹ý¶àÑо¿£¬Ö±½ÓºóÐøÏîĿʵ¼ù°É£¬ÏîÄ¿³öÕæÖª¡£

Éú³ÉÆ÷Generators

ES6ÖÐÌá³öÁËÉú³ÉÆ÷GeneratorsµÄ¸ÅÄÕâÊÇÒ»ÖÖÒì²½±à³ÌµÄ½â¾ö·½°¸£¬¿ÉÒÔ½«ÆäÀí½âΪһÖÖ״̬»ú£¬·â×°Á˶à¸öÄÚ²¿×´Ì¬£¬ÕâÀïÀ´¸ödemo£º

function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
hw.next()
// { value: 'hello', done: false }
hw.next()
// { value: 'world', done: false }
hw.next()
// { value: 'ending', done: true }
hw.next()
// { value: undefined, done: true }

Õâ¸öyield£¨²ú³ö£©ÀàËÆÓÚ֮ǰµÄreturn£¬Ö±¹ÛµÄÀí½â¾ÍÊÇÒ»¸öº¯Êý¿ÉÒÔ·µ»Ø¶à´ÎÁË£¬»òÕß˵º¯Êý¾ßÓС°Ë³Ðò״̬¡±£¬yieldÌṩÁËÔÝÍ£¹¦ÄÜ¡£ÕâÀïÎÒÏëд¸ö´úÂëÀ´ÑéÖ¤ÏÂÆÚÖеÄ×÷ÓÃÓò״̬£º

function* test(){
let i = 0;
setTimeout(function() {
i++;
}, 1000);
yield i;
yield i++;
return i
}

let t = test();
console.log(t.next());

setTimeout(function() {
console.log(t.next());
}, 2000);
console.log(t.next());

//{value: 0, done: false}
//{value: 0, done: false}
//{value: 2, done: true}

֮ǰÎÒÃÇдһ¸ö³ÇÊм¶ÁªµÄ´úÂ룬¿ÉÄÜ»áÓÐЩÁîÈ˵°ÌÛ£º

$.get('getCity', {id: 0}, function(province) {
let pid = province[0];
//¸ù¾ÝÊ¡id»ñÈ¡³ÇÊÐÊý¾Ý
$.get('getCity', {id: pid}, function(city) {
let cityId = city[0];
//¸ù¾ÝÊм¶id»ñÈ¡ÏØ
$.get('getCity', {id: cityId}, function(city) {
//do smt.
});
});
});

Õâ¸ö´úÂë´ó¼ÒÓ¦µ±±È½ÏÊìϤÁË£¬ÓÃpromiseÄÜ´ÓÓï·¨²ãÃæ½â¾öһЩÎÊÌ⣬ÕâÀï¼òµ¥½éÉÜÏÂpromise¡£

Promise

PromiseÊÇÒ»ÖÖÒì²½½â¾ö·½°¸£¬ÓÐЩͬÊÂÈÏΪÆä³öÏÖ¾ÍÊÇΪÁËÎÒÃÇ´úÂë±äµÃ¸üºÃ¿´£¬½â¾ö»Øµ÷µØÓüµÄÓï·¨ÌÇ£¬ES6½«ÆäдÈëÁËÓïÒô±ê×¼£¬ÌṩÁËÔ­ÉúPromise¶ÔÏó¡£PromiseΪһÈÝÆ÷£¬ÀïÃæ±£´æÒ첽ʼþµÄ½á¹û£¬ËûÊÇÒ»¸ö¶ÔÏó¾ßÓÐÈý¸ö״̬£ºpending£¨½øÐÐÖУ©¡¢fulfilled£¨Òѳɹ¦£©¡¢rejected£¨ÒÑʧ°Ü£©£¬ÕâÀﻹÊÇÀ´¸ö¼òµ¥´úÂë˵Ã÷£º

function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'done');
});
}

timeout(100).then((value) => {
console.log(value);
});

ʵÀý»¯Promiseʱ£¬µÚÒ»¸ö»Øµ÷±ØÐëÌṩ£¬ÊǽøÐÐתΪ³É¹¦Ê±ºò»áÖ´ÐУ¬µÚ¶þ¸öÒ²ÊÇÒ»¸öº¯Êýʧ°Üʱºòµ÷Ó㬷DZØÐ룬ÕâÀïÀ´¸ödemo£º

let timeout = function (ms) {
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
};

timeout(1000).then(function () {
return timeout(1000).then(function () {
let s = '´ó¼Ò';
console.log(s)
return s;
})

}).then(function (data) {
return timeout(1000).then(function () {
let s = data + 'ºÃ,';
console.log(s)
return s;
})
}).then(function(data) {
return timeout(1000).then(function () {
let s = data + 'ÎÒÊÇҶСîÎ';
console.log(s)
return s;
});
}).then(function(data) {
console.log(data)
});

Èç¹ûÎÒÃÇÇëÇóÓÐÒÀÀµµÄ»°£¬µÚÒ»¸öÇëÇóÒÀÀµÓÚµÚ¶þ¸öÇëÇ󣬴úÂë¾Í¿ÉÒÔÕâÑùд£º

let getData = function(url, param) {
return new Promise(function (resolve) {
$.get(url, param, resolve );
});
}
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').

then(function (data) {
console.log('ÎÒ»ñÈ¡ÁËÊ¡Êý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊ¡Êý¾ÝÉêÇëÊÐÊý¾Ý', data);
return getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').

then(function (data1) {
console.log(data1);
return 'ÎÒÊÇÊÐÊý¾Ý';
})

}).then(function(data) {
//Ç°ÃæµÄ²ÎÊý´«¹ýÀ´ÁË
console.log(data);
console.log('ÎÒ»ñÈ¡ÁËÊÐÊý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊÐÊý¾ÝÉêÇëÏØÊý¾Ý');
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').

then(function (data1) {
console.log(data1);
});
})

20
let getData = function(url, param) {
return new Promise(function (resolve) {
$.get(url, param, resolve );
});
}
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').

then(function (data) {
console.log('ÎÒ»ñÈ¡ÁËÊ¡Êý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊ¡Êý¾ÝÉêÇëÊÐÊý¾Ý', data);
return getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').

then(function (data1) {
console.log(data1);
return 'ÎÒÊÇÊÐÊý¾Ý';
})

}).then(function(data) {
//Ç°ÃæµÄ²ÎÊý´«¹ýÀ´ÁË
console.log(data);
console.log('ÎÒ»ñÈ¡ÁËÊÐÊý¾Ý,ÎÒÃÇÂíÉϸù¾ÝÊÐÊý¾ÝÉêÇëÏØÊý¾Ý');
getData('http://api.kuai.baidu.com/city/getstartcitys?callback=?').

then(function (data1) {
console.log(data1);
});
})

Èç´Ë±ã¿ÉÒÔ±ÜÃâ¶à²ãǶÌ×ÁË£¬¹ØÓÚPromiseµÄ֪ʶµã»¹ºÜ¶à£¬ÎÒÃÇÓöµ½¸´ÔӵŤ×÷³¡¾°ÔÙÄóöÀ´Ëµ°É£¬ÎÒ¶ÔËûµÄ¶¨Î»¾ÍÊÇÒ»¸öÓï·¨ÌÇ£¬½«Òì²½µÄ·½Ê½±ä³Éͬ²½µÄд·¨£¬¹Ç×ÓÀﻹÊÇÒì²½£¬ÉÏÃæÎÒÃÇÓÃPromise½â¾ö»Øµ÷µØÓüÎÊÌ⣬µ«Êǻص÷µØÓüÎÊÌâÓöµ½µÄ²»¶à£¬È´·¢ÏÖPromiseÒ»¶Ñthen¿´¼û¾ÍÓе㷳£¬ÎÒÃǵÄGeneratorº¯ÊýËÆºõ¿ÉÒÔÈÃÕâ¸öÇé¿öµÃµ½»º½â¡£

µ«ÊÇÔÝʱÔÚʵ¼Ê¹¤×÷ÖÐÎÒûÓÐÕÒµ½¸üºÃµÄʹÓó¡¾°£¬ÕâÀïÔÝʱµ½ÕâÀºóÃæ¹¤×÷Óöµ½ÔÙÏêÊö£¬¶ÔÕâ¿é²»ÊǺÜÊìϤҲ²»·Á°­ÎÒÃÇʹÓÃES6д´úÂë¡£

´úÀí

´úÀí£¬Æäʵ¾ÍÊÇÄãÒª×öʲôÎÒ°ïÄã×öÁ˾ÍÐÐÁË£¬Ò»°ã´úÀíµÄÔ­Òò¶¼ÊÇ£¬ÎÒÐèÒª×öµãÊֽţ¬»òÕß¶àµã²Ù×÷£¬»òÕß×öµã¡°¸³ÄÜ¡±£¬ÈçÎÒÃdz£³£°ü×°setTimeoutÒ»°ã£º

let timeout = function (ms, callback) {
setTimeout(callback, ms);
}

ÎÒÃǰü×°setTimeoutÍùÍùÊÇΪÁËclearTimeoutµÄʱºòÄÜÈ«²¿ÇåÀíµô£¬Æäʵ¾ÍÊÇÀ¹½ØÏ£¬ES6ÌṩÁËProxy¹Ø¼ü´ÊÓÃÓÚÉèÖôúÀíÆ÷£º


var obj = new Proxy({}, {
get: function (target, key, receiver) {
console.log(`getting ${key}!`);
return Reflect.get(target, key, receiver);
},
set: function (target, key, value, receiver) {
console.log(`setting ${key}!`);
return Reflect.set(target, key, value, receiver);
}
});
obj.count = 1
// setting count!
++obj.count
// getting count!
// setting count!
// 2


//target²ÎÊý±íʾËùÒªÀ¹½ØµÄÄ¿±ê¶ÔÏó£¬handler²ÎÊýÒ²ÊÇÒ»¸ö¶ÔÏó£¬ÓÃÀ´¶¨ÖÆÀ¹½ØÐÐΪ
var proxy = new Proxy(target, handler);

ÎÒÃÇÕâÀï¼ÌÐøÐ´Ò»¸ö¼òµ¥µÄdemo£º

let person = {
constructor: function(name, age = 20) {
this.name = name;
this.age = age
},
addAge: function() {
this.age++;
},
getAge: function() {
return this.age;
}
}

var proxy = new Proxy(person, {
get: function(target, property) {
console.log(arguments);
return target[property];
},
set: function(target, property) {
console.log(arguments);
}
});

person.constructor('ҶСîÎ', 30);
console.log(person.age)
console.log(proxy.age)

µ«ÊÇÔÝʱÎÒûÓз¢ÏֱȽϺõÄÒµÎñ³¡¾°£¬±ÈÈç˵£¬ÎÒÏÖÔÚÖØÐ´ÁËÒ»¸öʵÀýµÄget·½·¨£¬±ãÄÜÔÚÒ»¸öÈ«¾ÖÈÝÆ÷ÖмǼÕâ¸ö±»Ö´ÐÐÁ˶àÉٴΣ¬ÕâÀïÒ»¸öÒµÎñ³¡¾°ÊÇ£ºÎÒÒ»´Î¸öÒ³ÃæÁ¬Ðø·¢³öÁ˺ܶà´ÎÇëÇ󣬵«ÊÇÎÒµ¥Ò³Ó¦ÓÃ×öÒ³ÃæÌø×ªÊ±ºò£¬ÎÒÐèÒª½«ËùÓеÄÇëÇó¾ä±úÒÆ³ý£¬Õâ¸öËÆºõÒ²²»ÊÇ´úÀíÍê³ÉµÄ¹¤×÷£¬ÓÚÊÇҪʹÓÃES6д´úÂë£¬ËÆºõ¿ÉÒÔÔÝʱºöÂÔ´úÀí¡£

½áÓï

ÓÐÁËÒÔÉÏ֪ʶ£¬»ù±¾´Ó³ÌÐò²ãÃæ¿ÉÒÔʹÓÃES6д´úÂëÁË£¬µ«Êǹ¤³Ì²ãÃæ»¹ÐèÒªÒýÈëwebpackµÈ¹¤¾ß£¬ÕâЩÎÒÃÇÏ´νéÉܰɡ£

 
   
1890 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì