首页 > 其他分享 >变量声明

变量声明

时间:2023-04-13 20:55:54浏览次数:27  
标签:aa function console 变量 函数 var 声明 log

  变量声明

ES5中的var和function

es5中只有两种声明: var 和 function。 两者本质一样完全一样,只是var表明是一个变量,function在表明是一个变量的基础上,还特别标记这个变量的值是一段代码,所以function其实是一个带值的声明,var是不带值的声明。 所以,理论上可以将所有是 function 声明的地方直接替换为 var。 当位于等号右边时,就不是语句声明,而只是一个表达式 如 var a = function b(){...} b不会被提升,且b的作用域只在其函数体中。 var A = class B{} 也是一样的道理。   注意:
  1. var aa = function (){...} 这不是函数声明,而是函数表达式。
也就是 function (){...} 这是一个表达式,表达式的值是一个函数,只是这个表格式必须赋值给某个变量,不能单独存在,否则就是语法错误。
  1. 变量提升时,var 与 function 有点不一样, var只提升变量的声明,不提升变量的值, function是直接提升声明和值。
所以,
console.log(aa); // 输出的值是 函数,因为此时function aa(){} 已经提升,且还没有被赋值为9
var aa = 9;
function aa(){
    console.log(555);
}
console.log(aa); // 输出的值是9,因为 function aa 是整体提升
// 执行的过程是: 
// 先提升 var aa;    此时 aa是undefined
// 再提升 function aa(){...}, 此时 aa已经有值,是一个函数
// 最后,再执行  aa = 9;   此时 aa的值是9

// 等价于以下代码
var aa;
function aa(){
    console.log(555);
}
console.log(aa);
aa = 9;
console.log(aa); 
 
  1. 不带值的声明提升是不会影响(先提升的)变量的当前值的
function aa(){ // 最先提升
    console.log(6666);
}
function aa(){ // 第2个提升,因为有值,所以会覆盖前一个提升的aa的值
    console.log(555);
}
var aa; // 这里的变量提升,因为没有带值,不会对前面已经提升的有值的aa变量产生影响
console.log(aa); // 结果是输入555的函数aa

 

ES6中的let、const、var、function

 

作用域

花括号标记代码块,圆括号标记表达式。 在js中,花括号括起来的整体直接解析为代码块,而圆括号括起来的内容,直接解析为表达式。
{console.log(88);} // 花括号,解析为代码块
{x: 3, b: 4}  // 报错,因为花括号解析为代码块

function(){ console.log(3333); } // 报错,因为没有被赋值给其它变量,所以解析为一个函数, 但该函数没有有名字,相当于声明一个没有名字的变量,故语法错误

({x: 3, b: 4}) // 正确,圆括号解析为表达式,返回一个对象
(function(){ console.log(3333); }) // 正确,圆括号解析为表达式,返回一个函数
(function(){ console.log(3333); })() // 立即调用这个函数
(function(){ console.log(3333); }()) // 立即调用这个函数,圆括号中的函数被识别为一个表达式,则可以不要名字(如果被识别为函数声明,则必须要有名字)

for(let i=0; i<3; i++){}  // 注意,for循环中虽然也有圆括号,但这个圆括号是作为for语句的一部分而存在的,跟前面说的那种圆括号的含义完全不一样。这种情况还包括 while循环 if语句等结构
如何识别一个作用域 最外层的代码、函数体 es6中新增: for循环体、while循环体、if中的花括号、单独存在的花括号,均是一个独立的作用域。 另外,es6还有两种特殊情况:
  1. for循环的圆括号,整个圆括号位于一个独立的作用域中,循环体是这个作用域的子作用域。
  2. 函数声明或函数表达式中的圆括号,位于一个独立的作用域中,函数体是其子作用域。
                     

标签:aa,function,console,变量,函数,var,声明,log
From: https://www.cnblogs.com/xiafl/p/17316361.html

相关文章

  • JavaScript黑科技:变量监听
    作者:JShaman团队,转载请保留功能目标实时监视一个变量的值,当值发生改变时,马上给出提示。实现方法一直观且朴素的方法,可以用setInterval,循环检测变量的值,示例代码:<html><body><script>//要监视的变量vartest_value=1;setInterval(function(){......
  • 微网两阶段鲁棒优化matlab版 采用CCG和kkt条件编制两阶段鲁棒优化程序,以储能、发电、
    微网两阶段鲁棒优化matlab版采用CCG和kkt条件编制两阶段鲁棒优化程序,以储能、发电、风电和光伏容量作为第一阶段变量,以主体出力作为第二阶段变量,以负荷、风电和光伏出力作为不确定性变量,实现微网两阶段优化模型ID:2190641653026839......
  • dart中int类型变量与String类型变量拼接的三种方式
    dart中int类型变量与String类型变量拼接的三种方式//声明一个String类型变量Stringstr="你好Dart";//声明一个int类型变量intx=1;1、传统语言写法print(str+x.toString());2、类似于过JavaScriptes6新特性的写法2、print(str+"${x}");3、最简单的写法省略了{}......
  • 机器学习(六):回归分析——鸢尾花多变量回归、逻辑回归三分类只用numpy,sigmoid、实现RANS
    [实验1回归分析]一、预备知识使用梯度下降法求解多变量回归问题数据集Iris鸢尾花数据集是一个经典数据集,在统计学习和机器学习领域都经常被用作示例。数据集内包含3类共150条记录,每类各50个数据,每条记录都有4项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可......
  • 01.变量
    变量是一个保存数据的地方,当我们需要在程序里保存数据时,就需要一个变量来保存它。用一个变量保存了数据,它才能参加到后面的计算中,比如计算找零。点击查看代码#include<studio.h>intmain(){//定义一个变量。变量名是price,类型是int,初始值为0intprice=0;p......
  • go语言基础-变量和常量
    0x00标识符与关键字0x01标识符go语言中的标识符是由数字,字母和_(下划线)组成的,并且只能由字母和_开头。eg:abc,_,_abc,abc10x02关键字关键字是指编程语言中定义好的具有特殊意义的标识符。(关键字和保留字都不建议作为变量名)go语言中常用的25个关键字breakdefault......
  • mybatis全局变量 (mybatis.configuration.variables) 的应用
    mybatis.configuration.variables是一个可自定义的全局变量:在application.yml中定义:mybatis:mapper-locations:classpath:mapper/*.xmltype-aliases-package:com.example.entityconfiguration:variables:dbtype:mysqlmapper.xml中的使用:<!--更新......
  • (三)python多进程multiprocessing模块的变量传递问题:父进程中的numpy.array对象隐式序列
    参考:https://docs.python.org/zh-cn/3/library/multiprocessing.htmlcloudpickle——Python分布式序列化的专用模块python多进程multiprocessing模块的变量传递问题:父进程中的numpy.array对象隐式序列化到子进程后的inplace操作的问题-Death_Knight-博客园(cnblogs.com)......
  • spring声明式事务(注解)
     xml中开启注解驱动:  ......
  • 新员工入职,前端基础环境变量的配置!node、nvm、vue-cli的安装和下载
    1.安装nvm及配置首先下载nvm不要下载node,如果电脑已经有node的话需要卸载node,并使用命令提示符来查看node的位置(wherenode)手动删除nvm下载链接:https://nvm.uihtm.com/下载最新版本,next傻瓜式操作(需要注意的是)选择node.js文件位置,如果需要更改,请在这里进行更改......