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

es6箭头函数和普通函数的区别 在JavaScript中,函数是执行特定任务的代码块。函数可以被定义并且随后被调用。JavaScript中有两种主要的函数定义方式:普通函数声明和箭头函数表达式。 阅读详情

前言

最近在看 ES6 相关的文档,当讲解到箭头函数的时候,说了三个与普通函数的不同点,这里记录一番。

不同点

箭头函数的 this 指向定义时所在的对象

先来个普通函数的例子:

var user = {
    name: 'demo',
    getInfo: function () {
        setTimeout(function () {
            console.log(this)
        }, 200)
    }
}

普通函数的 this.png

再来一个箭头函数的例子:

var user = {
    name: 'demo',
    getInfo: function () {
        setTimeout(() => console.log(this), 200)
    }
}

=> 函数的 this

箭头函数不可以作为构造函数(即不能使用 new)

普通函数的例子:

var user = function () {}

普通函数可以 new

箭头函数的例子:

var user = () => {}

=> 函数不可以使用 new

箭头函数不能使用原型

普通函数的例子:

var user = function () {}

普通函数有 prototype

箭头函数的例子:

var user = () => {}

=> 没有 prototype

箭头函数没有 arguments 对象

普通函数的例子:

var user = function () {
    console.log(arguments)
}

普通函数有 arguments

var user = () => {
    console.log(arguments)
}

=> 没有 arguments

可以使用 rest 参数取代

var user = (...args) => {
    console.log(args)
}

使用 rest 参数取代

最后

做个笔记。

面试题6:ES6箭头函数与普通函数的区别 普通函数和箭头函数的区别: ………………………………………………………………………………………………………………………………………… 箭头函数的this指向规则: 1. 箭头函数没有prototype(原型),所以箭头函数本身没有this function test1 () { console.log(test1.prototype) } te... 阅读详情

相关推荐

ES6的箭头函数和普通函数相比有什么不同?

箭头函数适用于简单的函数定义和回调函数,对于需要使用 this 或 arguments 对象的情况,传统函数仍然更适合使用。箭头函数没有自己的 arguments 对象,无法通过 arguments 访问传入的参数列表。箭头函数没有自己的 this 值,它的 this 值继承自外部的词法作用域。这意味着在箭头函数内部,无法通过 this 访问到函数自身的上下文,而是使用外部作用域的 this 值。箭头函数使用箭头(=>)来定义函数,语法更加简洁明了,省略了传统函数中的 function 关键字和大括号。

祈澈菇凉 570

ES6箭头函数与普通函数的区别

箭头函数与普通函数的区别 作为ES6中新加入的箭头函数语法,深受广大开发人员的喜爱,也是平时前端面试过程中经常会被提及问道的典型题目。它不仅简化了我们的代码,而且也让开发人员摆脱了“飘忽不定”的this指向,本文就箭头函数与普通函数的区别进行一些分析。 在我看来,面试官最关注的也是两者最关键的区别就是this指向的区别,普通函数中的this指向函数被调用的对象,因此对于不同的调用者,this的...

很多时候犯错都是在不知情的情况下发生的 1976

基于Cesium的北斗卫星轨道实时可视化系统开发实践

本文详细介绍了基于Cesium的北斗卫星轨道实时可视化系统开发实践,涵盖系统架构设计、轨道计算实现、后端服务开发及前端可视化实现等关键环节。通过优化算法和数据流设计,系统实现了厘米级精度的卫星轨道实时渲染,适用于导航卫星系统的科研与工程应用。

j7k8l的博客 520

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

箭头函数是ES6中新增的一种函数类型,它具有许多特性和优点。与普通函数相比,箭头函数具有更短的语法、更简洁的代码、更清晰的上下文、更简单的this绑定和更好的性能。然而,箭头函数也有一些限制和缺点,例如不能作为构造函数、没有arguments对象、不能使用yield关键字和无法访问arguments.callee和new.target等。在实际编程中,需要根据具体情况选择使用箭头函数或普通函数。

tyxjolin的专栏 1711

Netty源码分析系列之writeAndFlush()下

write()只会将数据只是发送到了ChannelOutboundBuffer 缓冲区中,还没有被发送到操作系统的套接字中只有当调用了 flush()方法后,才会真正将数据发送到套接字中。那么 flush()方法的源码又是如何执行的呢?

天堂的博客 1572

使用SAM进行遥感图像语义分割

SAM(Segment Anything Model)的成功表明了以数据为中心的机器学习的重要性。然而,由于遥感(RS)图像注释的困难和高成本,大量有价值的RS数据仍然没有被标记,特别是在像素级。在这项研究中,我们利用SAM和现有的RS物体检测数据集,开发了一个高效的管道来生成大规模的RS分割数据集,称为SAMRS。SAMRS在规模上超过了现有的高分辨率RS分割数据集几个数量级,并提供了物体类别、位置和实例信息,可用于语义分割、实例分割和物体检测,无论是单独还是组合。

lalula的博客 7452

箭头函数详解()=>{}

摘要:箭头函数有几个使用注意点。 (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象,箭头函数继承而来的this指向永远不变。 (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。 (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。 (4)不可以使用yield命令,因此箭头函数不能用...

weixin_30685029的博客 1万+

Unity之ASE+ShaderGraph+VFX入门到精通 目录

这里是ASE+ShaderGraph+VFX从入门到精通专栏的目录,不停更新中,有问题随时留言或者私信。

TxNet 2841

ES6中的箭头函数和普通函数有什么区别?

ES6中的箭头函数和普通函数有什么区别? 1、普通函数的 this 永远指向调用它的那个对象(谁调用,this 就指向谁) 箭头函数没自己的 this,它的 this 永远指向其定义环境,任何方法都不能改变其指向,如 call()、bind()、apply()等。(正因为它没有 this,所以也就不能用作构造函数,也没有原型对象)。 2、箭头函数不能当做构造函数,也就是说,不能使用 new 命令,否则会报错。 3、箭头函数没有原型属性。 4、箭头函数不能使用 arguments 对象,该对象在函数

芮芮白的博客 1816

Qt C++ HTTP 调用通义千问大模型 X 学术论文润色工具(SCI 格式适配)

请求地址:`https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation`;| Windows | 打包时携带 `Qt6Network.dll`/`libcrypto-1_1-x64.dll` 等依赖;| Linux | 安装 `libssl-dev` 和 `libcurl4-openssl-dev`;| API 调用失败 | 检查 API-KEY 是否有效;

寒寒豆豆软件公司的博客 104

从工具选型到落地实践:吃透 SAP Fiori Launchpad 配置工具体系

摘要: SAP Fiori Launchpad配置远非简单添加应用和分配角色,涉及技术目录、业务目录、Spaces/Pages等多层管理。官方推荐新工具分工:技术目录用FLPAM维护应用定义,业务目录用FLPCM编排应用组合,Spaces/Pages优化用户体验布局,而传统Groups模式已被标记弃用。这种分层治理模式(定义层-编排层-展示层)能有效解决传输混乱、升级兼容性问题,尤其适合大规模项目实施。关键在于区分技术配置与业务呈现,避免将所有功能堆砌在单一旧工具中。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 103

ES6 箭头函数与普通函数的区别:全面透彻分析

ES6 箭头函数与普通函数的区别:全面透彻分析

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 7169

【计算机视觉 | 目标检测】目标检测常用数据集及其介绍(十一)

【计算机视觉 | 目标检测】目标检测常用数据集及其介绍(十一)

wzk4869的博客 738

8.ES6箭头函数与普通函数的区别

箭头函数与普通函数的区别 作为ES6中新加入的箭头函数语法,深受广大开发人员的喜爱,也是平时前端面试过程中经常会被提及问道的典型题目。它不仅简化了我们的代码,而且也让开发人员摆脱了“飘忽不定”的this指向,本文就箭头函数与普通函数的区别进行一些分析。 在我看来,面试官最关注的也是两者最关键的区别就是this指向的区别,普通函数中的this指向函数被调用的对象,因此...

扛麻袋的少年的博客 1645

ComfyUI 汉化教程(中文界面)

如果你对翻译的结果不满意,还可以进行修改。首先,进入目录,可以看到该目录中有很多 JSON 文件:打开 JSON 文件,找到要修改的内容,修改对应的Value值即可:最后,重启 ComfyUI 即可。

水滴的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

es6的箭头函数与普通函数的区别,箭头函数的this通常指向哪里,箭头函数可以用作构造函数吗?

1. 箭头函数与普通函数的区别:- 语法更简洁;- `this` 绑定规则不同:箭头函数的 `this` 由外部作用域决定,而普通函数的 `this` 在调用时动态确定;- 箭头函数不能作为构造函数。2. 箭头函数的 `this`: 箭头函数的 `this` 总是指向其定义时的外部作用域,而不是调用时的上下文。3. 箭头函数能否作为构造函数:不能。箭头函数没有 `prototype`,因此不能使用 `new` 创建实例。

2202_75961842的博客 1219

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ES6箭头函数、箭头函数与普通函数的区别

一、基本语法 ES6中允许使用箭头=>来定义箭头函数,具体语法,我们来看一个简单的例子: // 箭头函数 let fun = (name) => { // 函数体 return `Hello ${name} !`; }; // 等同于 let fun = function (name) { // 函数体 return `Hello ${name} !`; }; 可以看出,定义箭头函在数语法上要比普通函数简洁得多。箭头函数省去了function关键字,采

d_agege的博客 1013

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ES6普通函数与箭头函数的区别

面试常见问题:箭头函数与普通函数区别

m1009113872的博客 283

ES6-箭头函数、以及箭头函数和普通函数的区别

之前写项目的时候遇到函数中的this指向问题,最近总结了一些关于ES6中新增的箭头函数的用法以及与普通函数的区别。也欢迎大家随时指正、探讨!谢谢!

weixin_45290438的博客 274

ES6中箭头函数与普通函数的区别

ES6箭头函数与普通函数的区别 首先知道一下什么是箭头函数,箭头函数就是没有function关键字,而是一个类似箭头的函数: var a = ()=>{ return 1; } 相当于 function a(){ return 1; } 那么就来看一下他们的区别 箭头函数作为匿名函数,是不能作为构造函数的,不能使用new var B = ()=>{ value:1; } var b = new B(); //TypeError: B is not a constructor 箭

weixin_48458705的博客 267

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

普通函数在es5中就有了,箭头函数是es6中出现的函数形式,当然也可以继续用普通函数。 1、普通函数 let a=function(){ return 1+1 } let b=function(x){ return x } let c=function(a){ let x=5; return x+a } 2、箭头函数 更简短的函数 单条处理可以省略return和{大括号} 单个参数可以省略(小括号) let a=()=>1+1 let b=x=>x let c=(a)=>

m0_49016709的博客 509

es6中的箭头函数和普通函数有什么区别?

es6中的箭头函数和普通函数有什么区别? 1、普通函数的this总是指向他的调用者,箭头函数中没有自己的this,所以它的this指向其定义的环境,任何方法都改变不了他的this指向{call bind apply} 2、箭头函数没有自己的this所以不能用于构造函数,也没有原型对象,箭头函数不能作为构造函数,也没有原型对象,所以就不能用new,不然就会报错。 3、箭头函数不能使用yield命令,因此箭头函数不能用作Generator函数。 4、箭头函数不能使用arguments对象,该函数在函数体内不存

屈小康 688

ES6 箭头函数和普通函数有哪些区别 ?

ES6 中的箭头函数和普通函数有哪些区别 ? 箭头函数没有 prototype(原型): function test1 () { console.log(test1.prototype) } test1() //普通函数 constructor: f test1() const test2 = () => { console.log(test2.prototype) } test2() //箭头函数 undefined; this 指向规则不同 : 箭头函数 :它没有 proto...

Wu hao's blog 698

ES6箭头函数和普通函数中this的区别

定义上的区别 引用自:ES6中箭头函数VS普通函数的this指向 普通函数中的this 总是代表着它的直接调用者,如obj.fn,fn里的最外层this就是指向obj 默认情况下,没有直接调用者,this指向window 严格模式下(设置了’use strict’),this为undefined 当使用call,apply,bind(ES5新增)绑定的,this指向绑定对象 箭头函数中的this 默认指向定义它时,所处上下文的对象的this指向。 即使是call,apply,bind等方法也不能改

落羽成舟-博客 546
上一篇: win10安装docker踩过的坑
下一篇: GuzzleHttp Exception cURL error 60: SSL certificate problem: unable to get local
IMJCW
博客等级 码龄10年 13粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值