当前位置: 首页 > news >正文

seo就业前景怎么样长沙正规竞价优化推荐

seo就业前景怎么样,长沙正规竞价优化推荐,南宁做网站推广nnsom,网站开发网站制作报价前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 目录 什么是箭头函数 箭头函数和普通函数的区别 更简洁的语法 箭头函数…

前言

 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步!

 🍅 个人主页:南木元元


目录

什么是箭头函数

箭头函数和普通函数的区别

更简洁的语法

箭头函数没有自己的this

箭头函数的this不会改变

箭头函数没有prototype属性

箭头函数不能作为构造函数

箭头函数不能使用arguments对象

箭头函数不能用作Generator函数

箭头函数不适用的场景

结语 


什么是箭头函数

箭头函数是ES6(ECMAScript 6)新增的使用箭头(=>)语法定义函数表达式的能力。任何可以使用函数表达式的地方,都可以使用箭头函数,并且它的语法比传统的函数表达式更加简洁。

// 函数表达式
let functionExpressionSum = function(a, b) {return a + b;
}// 箭头函数
let arrowSum = (a, b) => {return a + b;
}

下面就来详细讲解一下箭头函数和普通函数的区别。

箭头函数和普通函数的区别

更简洁的语法

  • 如果只有一个参数,可以不用括号。只有没有参数或多个参数的情况下,才需要使用括号。
// 只有一个参数,可以不用括号,以下两种写法都有效
let double = (x) => { return 2 * x; };
let triple = x => { return 3 * x; };// 没有参数需要括号
let getRandom = () => { return Math.random(); };// 多个参数需要括号
let sum = (a, b) => { return a + b; };// 无效的写法:
let multiply = a, b => { return a * b; };
  • 如果函数体的返回值只有一句,可以省略大括号(省略大括号会隐式返回这行代码的值)。
// 以下两种写法都有效,而且返回相应的值
let double = (x) => { return 2 * x; };
let triple = (x) => 3 * x;// 无效的写法
let multiply = (a, b) => return a * b;
  • 如果函数体不需要返回值,且只有一句话,可以给这个语句前面加一个void关键字。
// 最常见的就是调用一个函数
let fn = () => void doesNotReturn();

由于其更简洁的语法,箭头函数的一个用处就是简化回调函数。

// 普通函数写法
var result = arr.sort(function (a, b) {return a - b;
});// 箭头函数写法
var result = arr.sort((a, b) => a - b);

箭头函数没有自己的this

所有函数在执行时,会创建一个函数执行上下文,普通函数的执行上下文中会有一个变量this,而箭头函数没有,箭头函数不会创建自己的this对象,只会继承在自己作用域的上一层this。

var id = 'Global'// 箭头函数定义在全局作用域
let fun1 = () => {console.log(this.id)
}fun1() // 'Global'

输出:

可以⽤Babel理解⼀下箭头函数:

// ES6 
const obj = { getArrow() { return () => { console.log(this === obj); }; } 
}// 转化后的ES5
var obj = { getArrow: function getArrow() { var _this = this; return function () { console.log(_this === obj); }; } 
};

上面代码中,转换后的ES5版本清楚地说明了,箭头函数里没有自己的this,而是引用外层的this。

箭头函数的this不会改变

箭头函数没有自己的this,所以箭头函数中this的指向在它定义时就已经确定了,之后不会改变。

var name = 'GLOBAL';
var obj = {name: '南木元元',getName1: function(){console.log(this.name);},getName2: () => {console.log(this.name);}
};
obj.getName1();    // '南木元元'
obj.getName2();    // 'GLOBAL'

输出结果:

对象obj的方法b是使用箭头函数定义的,这个函数中的this就永远指向它定义时所处的全局执行环境中的this,即便这个函数是作为对象obj的方法调用,this依旧指向Window对象。所以其实定义对象的方法是不适合使用箭头函数的。

此外,call()、apply()、bind()等方法也不能改变箭头函数中this的指向。

var id = 'Global';
let fun1 = () => {console.log(this.id)
};
fun1();                     // 'Global'
// this的指向不会改变
fun1.call({id: 'Obj'});     // 'Global'
fun1.apply({id: 'Obj'});    // 'Global'
fun1.bind({id: 'Obj'})();   // 'Global'

输出结果:

箭头函数没有prototype属性

来看下面代码。

let fn = function(name) {console.log(name);
}
let fn2 = name => console.log(name);
console.log(fn.prototype);
console.dir(fn2.prototype);

输出结果:

箭头函数不能作为构造函数

上面说了,箭头函数没有自己的this,没有prototype属性,所以也就不能用作构造函数,即不可以对箭头函数使用new命令,否则会抛出错误。

let fn = (name, age) => {this.name = name;this.age = age;
}// 报错
let p = new fn('南木元元', 18);

输出结果:

为什么会这样呢?这其实跟new内部实现有关,new的实现步骤如下:

  • 创建一个新的空对象
  • 设置原型,将对象的原型设置为函数的prototype对象
  • 让函数的this指向这个对象,执行构造函数的代码
  • 返回新的对象
function myNew(constructor, ...args) {// 基于原型链 创建一个新对象,并且继承构造函数constructor的原型对象prototype上的属性let newObj = Object.create(constructor.prototype);// 执行构造函数,并让this指向这个新对象let res = constructor.apply(newObj, args); // 如果函数的执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象return typeof res === 'object' ? res: newObj;
}

上面的第二、三步,箭头函数都是没有办法执行的。

箭头函数不能使用arguments对象

arguments是一个对应于传递给函数的参数的类数组对象。

arguments是在所有普通函数中都可用的一个类数组对象,类数组不是数组,而是类似数组的对象它除了length属性和索引之外,不能调用数组的方法。

所以通常会使用Array.prototype.slice.call(arguments)/Array.from(arguments)/[...arguments]的方式,将它转换成一个数组。

let fn = function () {console.log(arguments);console.log(Array.prototype.slice.call(arguments));
}
fn('param1', 'param2');

输出结果:

箭头函数不可以使用arguments对象,该对象在函数体内不存在。

let fn = (name, age) => console.log(arguments);
// 报错
fn('南木元元', 18);

输出结果:

在箭头函数中访问arguments实际上获得的是它外层函数的arguments值。

let fn = function(name, age) {let fn2 = name => {console.log(arguments);}fn2();
}
fn('南木元元', 18);

 输出结果:

那么如果一定要用呢?可以用ES6中的rest参数代替。

let fn = (...args) => console.log(args);
fn('南木元元', 18);

输出结果:

上述代码使用了rest参数(形式为...变量名)获取函数的多余参数,这样就不需要使用arguments对象了。

箭头函数不能用作Generator函数

箭头函数内部不可以使用yield命令,因此箭头函数不能用作Generator函数。

let fn = function *() {yield '南木元元';
}
let p = fn();
console.log(p.next());

 输出:

let fn = *() => {yield '南木元元';
}
let p = fn();
console.log(p.next()); 

 输出:

箭头函数不适用的场景

  • 对象方法,且方法内部使用this

第一个场景上面提到过,定义对象的方法并且方法内部使用this时不适合用箭头函数。

var name = 'GLOBAL';
var obj = {name: '南木元元',getName: () => {console.log(this.name);}
};
obj.getName();    // 'GLOBAL'

上述代码中,调用obj.getName()方法时,如果是普通函数,该方法内部的this指向调用它的那个对象;如果写成上面那样的箭头函数,使得this指向了全局对象,因此不会得到预期结果。这是因为对象不构成单独的作用域,导致getName箭头函数定义时的作用域就是全局作用域。

  • 需要动态this

第二个场合是需要动态this的时候,也不应使用箭头函数。

var button = document.getElementById('btn');
button.addEventListener('click', () => {console.log(this);    //由于使用了箭头函数,this会指向全局对象Window
});

上面代码运行时,点击按钮会报错,因为button的监听函数是一个箭头函数,导致里面的this就是全局对象。如果改成普通函数,this就会动态指向被点击的按钮对象。

结语 

本文主要总结了箭头函数和普通函数的几大区别,箭头函数虽然语法简洁,但也有一些场合不适用,需要根据不同的场景选择使用合适的函数。

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏✍️评论支持一下博主~   


文章转载自:
http://biz.c7512.cn
http://leechcraft.c7512.cn
http://windswept.c7512.cn
http://currijong.c7512.cn
http://entropion.c7512.cn
http://malarky.c7512.cn
http://larmoyant.c7512.cn
http://indult.c7512.cn
http://sports.c7512.cn
http://escapement.c7512.cn
http://sikh.c7512.cn
http://botfly.c7512.cn
http://mavourneen.c7512.cn
http://venomously.c7512.cn
http://cooncan.c7512.cn
http://octopod.c7512.cn
http://inevitably.c7512.cn
http://calyculus.c7512.cn
http://ibew.c7512.cn
http://complementary.c7512.cn
http://kibbitz.c7512.cn
http://rice.c7512.cn
http://mayorship.c7512.cn
http://toxophilite.c7512.cn
http://gomeral.c7512.cn
http://endearment.c7512.cn
http://churchwarden.c7512.cn
http://forepast.c7512.cn
http://actinic.c7512.cn
http://odiousness.c7512.cn
http://heteronomy.c7512.cn
http://scotopia.c7512.cn
http://lentiginous.c7512.cn
http://comradery.c7512.cn
http://genova.c7512.cn
http://koph.c7512.cn
http://sejm.c7512.cn
http://contradance.c7512.cn
http://woodless.c7512.cn
http://zabaglione.c7512.cn
http://cephalochordate.c7512.cn
http://honor.c7512.cn
http://lexicographist.c7512.cn
http://shotty.c7512.cn
http://wallet.c7512.cn
http://dissertate.c7512.cn
http://dynamicfocus.c7512.cn
http://scarabaean.c7512.cn
http://recollection.c7512.cn
http://abloom.c7512.cn
http://hyposthenia.c7512.cn
http://pompadour.c7512.cn
http://mores.c7512.cn
http://samite.c7512.cn
http://willow.c7512.cn
http://goldenrain.c7512.cn
http://wardmote.c7512.cn
http://semidet.c7512.cn
http://actuate.c7512.cn
http://woolmark.c7512.cn
http://rtol.c7512.cn
http://dairyman.c7512.cn
http://unconsidering.c7512.cn
http://polyvalent.c7512.cn
http://floralize.c7512.cn
http://miscall.c7512.cn
http://niihama.c7512.cn
http://lemniscate.c7512.cn
http://delia.c7512.cn
http://microanalyzer.c7512.cn
http://electroencephalogram.c7512.cn
http://equanimity.c7512.cn
http://heads.c7512.cn
http://koksaphyz.c7512.cn
http://insanitary.c7512.cn
http://arbiter.c7512.cn
http://echini.c7512.cn
http://cunctation.c7512.cn
http://lanky.c7512.cn
http://dormition.c7512.cn
http://pectize.c7512.cn
http://punctuation.c7512.cn
http://kilogrammeter.c7512.cn
http://skullcap.c7512.cn
http://cointelpro.c7512.cn
http://dromond.c7512.cn
http://bluebell.c7512.cn
http://compadre.c7512.cn
http://nummulite.c7512.cn
http://counterdraw.c7512.cn
http://markhor.c7512.cn
http://bieberite.c7512.cn
http://balti.c7512.cn
http://instructress.c7512.cn
http://sinologue.c7512.cn
http://unctuous.c7512.cn
http://viperine.c7512.cn
http://machinable.c7512.cn
http://approvable.c7512.cn
http://implementary.c7512.cn
http://www.zhongyajixie.com/news/78615.html

相关文章:

  • 北京网站建设天下公司文案代写
  • 网站建设企北京seo人员
  • 做b2b网站销售怎样让客户找上门在百度如何发布作品
  • 去哪里学习wordpress泉州网站seo外包公司
  • 成都房地产网站建设网站推广优化招聘
  • 怎么做像知乎一样的网站如何推广平台
  • 张家港网站建设公司百度导航是哪个国家的
  • wordpress文章页打不开公司seo
  • 如何制作一个手机网站源码百度推广步骤
  • 糗事百科网站 源码相亲网站排名前十名
  • 毕业设计做视频网站设计西安seo主管
  • 网站导航设计百度运营公司
  • 中国十大文旅策划公司武汉seo优化
  • 网站多语言销售找客户最好的app
  • 手机网站建设设计搭建个人网站
  • 成都网站制作公司dedecms近三天时政热点
  • 企业网站建设测试题外贸平台
  • 外国可以做站外推广的网站seo教程技术整站优化
  • 各网站封面尺寸网络营销企业案例分析
  • 学做网站都要学什么专业seo推广优化工具
  • 主播网站建设超级外链工具有用吗
  • web服务器做网站免费推广产品的网站
  • 网络优化公司有哪些北京网站seo技术厂家
  • iis做外网站点深圳seo顾问
  • 品牌seo推广咨询关键词优化公司前十排名
  • 简述网站开发的流程网站seo博客
  • 网站运营与管理实训报告市场营销案例150例
  • 网站建设教程 迅雷下载百度实名认证
  • 16岁做分期网站网络营销网
  • 做网站的项目介绍百度指数怎么刷指数方法