JavaScript立即执行函数的解释分析(2)—函数表达式与函数声明的区别

JavaScript 函数解析:声明、区别、回调与立即执行 本文全面介绍了 JavaScript 中的函数。涵盖函数的基本介绍、三种声明方式、命名函数等的区别、回调函数以及 IIFE,并结合案例分析,为开发者深入理解和运用函数提供了丰富的知识和实用的参考。 阅读详情
说明

上次我们聊了聊表达式与语句的区别,这次我们说说函数表达式与函数声明,上次虽然提到过这两点,但是并没有很详细的讲,这次要专门聊聊了!

函数表达式(函数定义表达式)

函数定义表达式定义一个JavaScript函数。表达式的值就是这个新定义的函数。
比如,像这样
var a=function (x){ console.log(x) }

函数声明

说函数声明,就要提到上次我们说过的声明语句了,声明语句用来声明新变量或定义新函数,var和function都是声明语句,它们声明或定义变量或函数。 像这样

var i;      //一个简单的变量
var j=2;    //一个带有初始值的变量
function f(j){ return j+1;} 	//函数声明语句定义函数(函数声明)
区别

js程序在正式执行之前,会将所有 var 声明的变量和 function 声明的函数,预读到所在作用域的顶部,var 声明只是将声明提前,赋值仍然保留在原位置,function 声明,会将函数名称和函数体都提前,这个过程也被叫做,“预解析”或者“预编译”。
代码

var a=function (){
	console.log("a");
}
function a(){
	console.log("b");	
}
a();

上面这段代码会输出 a,根据上面提到的概念,代码其实是这样执行的

var a;		//var 声明只是将声明提前,赋值仍然保留在原位置
function a(){		//function 声明,会将函数名称和函数体都提前
	console.log("b");
}
a=function(){
	console.log("a");
}
a();

所以,最后的结果就是 a 了,如果你对声明提前还是不太理解可以看这里 谈谈 JavaScript 中的 声明提前(hoisting)
好的我们继续说别的区别。

代码

var a=function a (){
	console.log(1);
}();
//这段代码会输出1   
function a (){
	console.log(1);
}
a();
//这段代码会输出1
function a (){
	console.log(1);
}();
//这段代码会报错,如图

这里写图片描述

也许你会奇怪,到底发什么了什么,还记得上次我们说的调用表达式吗?
调用表达式是一种调用(或者执行)函数或方法的语法表示。

f(0)     //f是一个函数表达式

函数在定义的时候是不执行的,要执行的话就要调用函数,就是用 函数表达式 +(),来调用,所以你明白了,第一段代码后面直接写(),是因为它本来就是函数表达式,后面写(),那自然就是调用了,而第二段代码,是函数声明,所以用了 函数名+()来调用,函数名在这就是函数表达式,但是最后一段代码报错了,因为它不是函数表达式,是函数声明,所以不能用直接加()的方式调用。

最后我们再说一点,先看代码

var a=1;
function b(){
	function a(){
	}
	console.log(a);
}
b();
console.log(a);
//最后输出什么

结果
这里写图片描述

最后会输出 函数a 和 1,可能有朋友会奇怪,函数a 为什么没有覆盖全局变量a,解释一下。

一条函数声明语句实际上声明了一个变量,并把一个函数对象赋值给它。
也就是说在函数b 中声明了一个变量 a,这个变量a,就是函数b中的一个局部变量,所以,它不会影响外面的全局变量a,但是要是改成下面这样就会影响了。

var a=1;
function b(){
	a=function (){
	}
	console.log(a); //输出一个函数
}
b();
console.log(a); //输出一个函数

结果

这里写图片描述

因为这样,在函数b中,没有声明a,但是给它赋值了,就相当于在全局对象中创建一个a,但是全局对象中已经有a了,所以会覆盖原来a的值,所以最后会输出两次函数

总结

简单说,函数表达式与函数声明的区别主要是两个方面,一方面是声明提前的区别,虽然都提前,但函数表达式只是将声明提前,赋值仍然保留在原位置,函数声明,会将函数名称和函数体都提前,另一方面就是调用的区别,函数表达式后面可以直接写()来调用函数,而函数声明不可以。

JavaScript立即执行函数的三种不同写法 第一种: (function () { // open IIFE // inside IIFE }()); // close IIFE 第二种: !function () { // open IIFE // inside IIFE }(); // close IIFE 第三种: void function () { // open IIFE // inside IIFE }(); // close IIFE 立即下载

相关推荐

基于一维卷积神经网络对机械振动信号进行分类并加以预测

基于一维卷积神经网络对机械振动信号进行分类并加以预测 *使用一维卷积神经网络训练振动信号进行二分类 2020年7月16日,一学期没等到开学,然而又放假了。 总览优快云中大多数卷积神经网络都是对二维图片进行分类的,而图片也都是常见的猫狗分类,minst手写数字分类。一维卷积神经网络的使用非常少见,有也是IDMB情感分类,和鸢尾花分类的。 作者研究生就读于河北一所双飞,全国排名270多,哈哈哈,不吹不黑。 在网上翻来翻去找不到一篇可以利用的代码去研究我的机械故障诊断,后来在无奈下到某宝搜寻到一段代码,可以利用

qq_45714906的博客 1万+

立即执行函数,let和var

定义 立即执行函数:声明一个函数,并马上调用这个匿名函数就叫做立即执行函数。立即执行函数表达式 与立即执行函数相关的面试题 为什么alert总是3?因为i是贯穿整个作用域的,而不是给每一个li分配一个i,点击事件onclick使事件异步,用户一定是在for运行完了之后,才点击,此时i已经变成3了。那么怎么解决这个问题,可以用立即执行函数,给每个li创建一个独立的作用域。 let和var的区别 let是es6中新增的命令,也是用来声明变量的。 let和var的区别体现在作用域上。var的作用域被规定

Purple_JJ的博客 342

设计一个订单管理系统(OMS)系统100问?

一个完善的订单管理系统不仅仅是简单地记录和处理订单信息,更需要考虑到订单的全生命周期管理,包括订单的创建、支付、配送、售后等环节。这100个问题围绕订单管理系统(OMS)的各个方面展开,涵盖了系统的功能、架构、安全性、异常处理、订单处理流程、支付、库存管理、客户管理、报表与分析等多个方面。通过这些问题,可以全面考虑订单管理系统在设计与实现过程中需要考虑的各种因素,从而确保系统能够满足业务需求、具有良好的性能和稳定性,同时易于扩展、维护和管理。

nbsaas-boot基于Request-Response的企业级快速开发框架 1384

JS中用var声明变量和不用的区别

在JS中声明变量时用var和不用var有什么区别,我查阅了很多的资料和书籍再加上我自己的理解来讲述一下我自己的看法。 在函数内部声明变量 在函数内部如果用var声明变量和不用时有很大差别,用var声明的是局部变量,在函数外部访问这个变量是访问不到的,没var声明的是全局变量。在函数外部是可以访问到的。 function ff(){ var a=1; console.log(a);

lxiang222的博客 4397

请叫我鱼拆,2024扫地机器人的第一次拆机

从背面可以看出,这个机器人是两轮差速模型,两个驱动轮,一个万向轮,驱动轮位于机器人中心位置,这样原地旋转的圆心就是机器人的中心。可以看到设备已经连接,但是没有办法进shell,厂家应该有做了安全保护之类的,有知道从这个口可以登录系统办法的小伙伴可以后台留言。但这台机器人一直报警说,机器人轮子离地,小鱼 估计是防跌落模块有问题,误触发了,所以打算先拆机看看。接着小鱼试了下,机器可以开机,然后给他重新配置wifi,连上 米家。Allwinner,全志的片子,不知道哪个型号的,看产品id,应该支持adb。

生活不止眼前的苟且 3935

【AI实战】用Coze工作流打造抖音视频文案提取神器——从单链接到批量处理的进阶指南

本文详细介绍了如何利用Coze工作流打造抖音视频文案提取工具,从单链接处理到批量提取的进阶指南。通过AI技术和工作流的结合,用户可以高效提取抖音视频的ASR和OCR文本,大幅提升内容创作效率。文章还涵盖了性能优化、异常处理及实际应用场景扩展,助力开发者快速实现抖音文案自动化提取。

weixin_29210759的博客 281

[乐意黎原创]JS函数声明、 函数表达式与立即执行函数的理解与执行顺序

定义函数的方法定义函数的方法主要有三种:函数声明(Function Declaration)函数表达式Function Expression)new Function构造函数其中,经常使用的是函数声明和函数表达式的函数定义方法,这两种方法有着很微妙的区别和联系,而且这两种方法的使用也容易混淆,所以这篇文章主要总结下这两种函数定义方法的相关知识点,当然本文的主题依然是关于函数提前的。函数声明的典型格...

打杂人-aerchi 3863

【OpenCV】背景替换(opencv、python),照片、证件照的背景替换(抠图)

目录步骤:导入库1、读入将要抠图的图片2、create一个带颜色域的mask3、通过mask使得原图只显示汽车,即抠出所需要的部分4、将要替换掉的图像resize或裁剪到和上述图片一样的大小5、将该图片预留出将要重叠上的部分,即将mask部分改为(0,0,0)6、通过和运算使得两部分图片mask部分替换7、最后保存图片 步骤: 导入库 import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np imp

weixin_41729258的博客 4362

js 函数声明、函数表达式、匿名函数的区别与调用执行总结

一、函数声明、函数表达式、匿名函数的区别: 函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。 函数表达式 var fnName = function () {…};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。 匿名函数:functio...

weixin_44505375的博客 886

124、LLC谐振变换器的矩阵变压器设计

摘要 本文分享了LLC谐振变换器中矩阵变压器的实战设计经验。针对大功率LLC单颗变压器的痛点(绕组层数多、散热不均、漏感一致性差),作者提出将大变压器拆分为多个小变压器单元(建议6个),通过原边串联、副边并联的方式实现功率分配。详细解析了磁芯选型、匝比计算、绕组结构、漏感控制和散热设计等关键参数,特别强调了小磁芯优势、等效匝比计算误区以及三明治绕法的重要性。文中还总结了调试过程中的谐振频率偏移和均流问题解决方案,并给出了矩阵数量选择、磁芯材质、绝缘材料等实用建议。作者指出,矩阵变压器在2kW以上LLC应用中

Jack010169的博客 173

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆自动紧急制动(AEB)仿真

本文完成了基于 Simulink 的智能车辆自动紧急制动(AEB),实现了:✅ 构建前车急刹与静止障碍物典型场景✅ 设计基于 TTC 的三级 AEB 决策逻辑✅ 验证在高风险场景下有效避免碰撞✅ 掌握从风险评估到制动执行的完整安全链✅ 为ADAS 主动安全功能开发奠定基础。

MHD0815的博客 237

[ydkjs] wss个人理解立即执行表达式(function......)() 不加;的错误

读这本书的时候遇到了这样的一个情况 var a=2 (function foo(){ //此行出现错误 Uncaught TypeError: // 2 is not a function var a=3 console.log(a) })() console.log(a) 那么问题就来了 为什么报错,立即执行表达式报错,这个时候我就发现,我根本就不了解 立即执行表达式

qq_39669767的博客 147

基于STM32L4XX 、HAL库的ATD5984步进电机驱动器驱动程序应用设计

一、简介: ATD5984是一款内部集成了译码器的微特步进电机 驱动器,能使双极步进电机以全、半、1/4、/1/8、1/16 和1/32步进模式工作。步进模式由逻辑输入管脚MSx选 择。其输出驱动能力达到28V±1.6A。 译码器是ATD5984易于使用的关键,通过STEP管脚 输入一个脉冲就可以使电机完成一次步进,省去了相序 表,高频控制线及复杂的编程接口,使其更适于没有复 杂的微处理器或微处理器负担过重的场合。 在步进操作期间,ATD5984的内部电路可以自动

PP_Cottage的博客 408

JS中立即执行函数和闭包的区别

函数声明 规则:必须指定一个函数名字 foo(); function foo() { console.log("函数声明") } 由于函数声明会被提升,所以调用函数可以在之前或之后调用 函数表达式 规则:将函数赋值给一个变量 var foo = function () { console.log("函数表达式") } foo() 由于函数表达式,只会对变量foo进行提升...

刘运召的博客 6827

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

函数表达式和函数声明有什么区别?

1.背景介绍 函数声明 函数声明可以定义命名的函数变量,而无需给变量赋值。函数声明是一种独立的结构,不能嵌套在非功能模块中。可以将它类比为 变量声明。就像变量声明必须以“var”开头一样,变量声明必须以“function”开头。函数名在自身作用域和父作用域内是可获取的。   函数表达式 函数表达式将函数定义为表达式语句(通常是变量赋值)的一部分。通过函数表达式定义的函数可以是命名的,也可...

storyoco的博客 1万+

深度学习工具包 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")

avaScript函数声明与立即执行解析

JavaScript函数声明方式包括函数声明、函数表达式和Function构造函数。立即执行函数表达式(IIFE)通过将函数声明转换为表达式实现立即执行,常见写法如(function(){})()。函数声明会被提升而函数表达式不会,IIFE常用于模块模式和避免全局污染。现代JS推荐使用ES6模块化替代IIFE。解析器将带括号的function识别为表达式从而允许立即执行。掌握这些概念对理解作用域和闭包很重要。

油墨香^-^的博客 878

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

函数声明与函数表达式习题

我们整体分析代码的执行过程通过函数表达式定义变量foo并赋值为一个匿名函数,该函数在被调用时打印"foo1"。接着,通过函数表达式重新定义变量foo,赋值为另一个匿名函数,该函数在被调用时打印"foo2"。使用函数声明定义了两个名为foo的函数。函数声明会在作用域中进行提升。后面的会覆盖前面的,由于声明从一开始就提升了,而又执行了两个赋值操作,所以此时foo是第二个赋值的函数。然后调用foo(),输出"foo2"。再调用foo(),也输出"foo2"。

金乌的博客 1309

js函数声明与函数表达式的区别

函数声明与函数表达式 js被称为披着C外衣的Lisp语言,lisp是一种强大的函数是语言 函数可以赋值给变量,可以作为参数来传递。 funciton qwe(){ } var asd = function(){ } 这两种方式,效果是不同的, qwe是函数声明,虽然全局也得到了一个qwe变量,值function。 而asd只是一个赋值过程,值是右侧的表达式的返回结果,即函数 就是说...

weixin_44934844的博客 195

Js中函数声明和函数表达式的区别

先看以下几段烧脑的代码: 1 2 3 4 5 6 7 8 f();//=>? varf =function() { console.log("var"); } functionf() { console.log("function"); }   控制台打印结果"function"。 另一段代码 1 2 ...

突维 277

js基础篇:2、函数声明与函数表达式的区别

函数的创建 创建一个函数的方法有以下三种: 函数声明 函数表达式 构造函数 表达方式 函数的三种创建方法中,我们最常用的是为函数声明和函数表达式。 1.函数声明 基本写法 function adders(num){ return num+=1 }; 注意: 函数声明会进行函...

chuanlounu4592的博客 151

深入理解变量声明提升和函数声明提升

变量声明提升 1、变量定义 可以使用var定义变量,变量如果没有赋值,那变量的初始值为undefined。 2、变量作用域 变量作用域指变量起作用的范围。变量分为全局变量和局部变量。全局变量在全局都拥有定义;而局部变量只能在函数内有效。 在函数体内,同名的局部变量或者参数的优先级会高于全局变量。也就是说,如果函数内存在和全局变量同名的局部变量或者参数,那么全局变量将会被局部变量覆...

前端超人 2万+

函数声明和函数表达式

函数定义和函数表达式 函数定义 例题1: //不会报错,因为"提升了"函数声明,函数调用可在函数声明之前 fn1(); function fn1(){ console.log("这里是函数定义"); } 函数表达式 例题1: fn2(); //会报错(错误信息:“fn2 is not a function”),变量fn2还未保存对函数的引用,函数调用必须在函数表达式之后 ...

qq_43952245的博客 263

JS立即执行函数表达式IIFE(Immediately Invoked Function Expression)(JSX立即执行函数)箭头函数写法

IIFE是的缩写,意思是“立即执行的函数表达式顾名思义,它定义完就立刻执行,不需要再单独调用。");})();这段代码定义了一个匿名函数,然后立刻执行它。在函数外层加上一对小括号(),告诉 JavaScript 引擎:“这是一个表达式,不是普通函数声明。");}();就会报错,因为单独的function开头在语法上是函数声明,声明不能直接调用。加上括号,就变成了表达式形式,可以立即执行。IIFE 是一种定义并立即执行的函数表达式。

Dontla的博客 812

js函数表达式和函数声明的区别

我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义“隐 藏”起来,外部作用域无法访问包装函数内部的任何内容。 例如: var a = 2; function foo() { // <-- 添加这一行 var a = 3; console.log( a ); // 3 } // <-- 以及这一行 foo(); // <-- 以及这...

banghuangshuo6405的博客 232

js立即执行函数

关于立即执行函数 立即执行函数执行后即消失,不能重复调用,有形参、实参、返回值 立即执行函数的两种形式: 第一种: (function (a,b) { //a b为形参 }(1,2)); //1 2为实参 第二种: ( function () { })(); 注意:只有表达式才能被执行 关于函数声明与函数表达式: 函数声明: function test(){ } 函数表...

weixin_43656326的博客 181

javascript中函数声明与函数表达式的一些认识

在了解了js中!!的作用后,看百度搜索里还有搜索function前!的条目,所以点进去看了下,发现了这篇文章:function与感叹号,里面提到一个关键概念是函数表达式,于是又查了资料对函数声明和函数表达式进行了一点深入了解。下面是学习记录。

summer_savetime的专栏 470
上一篇: JavaScript立即执行函数的解释分析(1)—表达式与语句的区别
下一篇: JavaScript立即执行函数的解释分析(3)—谈谈圆括号()
FEWY
FEWY 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄10年 504粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值