JavaScript基础03——函数的作用域及变量提升
1.作用域
2.局部作用域和全局作用域
function fn(){
var a = 1;
}
console.log(a); //报错:a is not defined
用var声明的变量,实际上是有作用域的
在函数内部定义的变量,该变量的作用域是整个函数体,在函数体外不可引用该变量,这是局部作用域
变量的生命周期:
1.永远存在----全局
程序没关,一直占用内存,少用全局
2.朝生暮死----局部
函数的大括号开头到函数的大括号结尾
var a = 1;
function fn(){
console.log(a); //
}
console.log(a); //
不在任何函数内定义的变量就具有全局作用域。全局变量在任何地方都能调用。
作用域的处理方式:利用匿名函数生成一个局部作用,把变量的声明和使用这个变量的小函数都放在匿名函数中
// 全局作用域下的变量,叫全局变量
var a = 10;
// 局部作用域下的变量,叫局部变量
function fn(){
var a = 20;
console.log(a)
}
function fn1(){
var a = 30;
console.log(a)
}
function fn2(a){
console.log(a)
}
fn();
fn1();
fn2("hello");
// console.log(a); // 函数中的形参也是变量,形参也是当前函数的局部变量
3.声明提升
变量声明提升:
console.log(a) //undefined已经声明但是未赋值
var a = 2;
console.log(a) // consoleo.log(b) //not a defined未声明 function fn(){
console.log(a) //undefined
var a = 1;
}
fn();
在函数fn()中,在没有定义变量之前打印a,得到undefined,而并不是not defined
说明此时变量已经被声明,只是还没有被赋值。 上面的fn()函数可以理解成
function fn(){
var a;
console.log(a);
a = 1;
}
fn(); 我们称这种现象为变量的声明提升,所有使用var声明的变量会在当前作用域最开始的部分被声明。
函数的声明提升:整体提升
fn(); //
function fn(){
console.log(2);
}
fn(); // ------------------------------------
注意:
console.log(fn); //undefined
fn(); //not a function
var fn = function(){
console.log(1);
}
function fn(){
console.log(a); //f2
var a = "hello";
console.log(a); //"hello"
function a(){1}
console.log(a); //"hello"
a = "world";
console.log(a); //"world"
function a(){2}
console.log(a); //"world"
}
// 以上代码等价于↓↓↓
function fn(){
var a;
function a(){1}
function a(){2}
console.log(a); //f2
a = "hello";
console.log(a); //"hello"
console.log(a); //"hello"
a = "world";
console.log(a); //"world"
console.log(a); //"world"
}
fn();
JavaScript基础03——函数的作用域及变量提升的更多相关文章
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- JavaScript 基础(五) 函数 变量和作用域
函数定义和调用 定义函数,在JavaScript中,定义函数的方式如下: function abs(x){ if(x >=0){ return x; }else{ return -x; } } ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- javascript中的变量作用域以及变量提升
在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...
- javascript中的变量作用域以及变量提升详细介绍
在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...
- JS 函数作用域及变量提升那些事!
虽然看了多次js函数作用域及变量提升的理论知识,但小编也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷) ...
- JS _函数作用域及变量提升
虽然看了多次js函数作用域及变量提升的理论知识,但也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷)&g ...
- Javascript作用域和变量提升
下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是10: 那么 ...
- javascript基础03
javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...
随机推荐
- js中基本包装类型详情
基本包装类型 基本包装类型有Boolean,Number和string类型,每当读取一个基本类型值时,后台就会创建一个对应的基本包装类型对象. 从逻辑上,基本类型值不是对象,没有方法,但从技术上来看, ...
- 1. Spark GraphX概述
1.1 什么是Spark GraphX Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求.那么什么是图 ...
- React 语法
1.JavaScript XML JSX = JavaScript XML,是一个看起来很像 XML 的 JavaScript 语法扩展.JSX 不是模板,是JS语法本身,有更多的扩展.JSX 组件一 ...
- NMS(non maximum suppression,非极大值抑制)
"""nms输入的数据为box的左上角x1,y1与右下角x2,y2+confidence,rows=batch_size,line=[x1,y1,x2,y2,confid ...
- Java自学-数组 排序
Java 数组选择法,冒泡法排序 步骤 1 : 选择法排序 选择法排序的思路: 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来 比较完后,第一位就是最小的 然后再从第二位和剩余的其 ...
- vue中监听页面是否有回车键按下
需求:当我在登录页面输入密码和账号后,按下回车键实现登录 mounted(){ let _this = this document.onkeydown = function(e) { if(e.key ...
- 纽约LangeEylandt长岛LongIsland
LangeEylandt n.长岛(美国) 纽约长岛 纽约长岛 (LongIsland)是北美洲在大西洋内的一个岛,最早追溯到十七世纪的1650年被命名为Lange Eylandt [1] ,位于北美 ...
- 网络监听工具 嗅探器 SpyNet
配置网卡 注册 监听配置 开始捕获
- Hive Lateral View
一.简介 1.Lateral View 用于和UDTF函数[explode,split]结合来使用. 2.首先通过UDTF函数将数据拆分成多行,再将多行结果组合成一个支持别名的虚拟表. 3.主要解决在 ...
- Jenkins使用过程中注意事项
jenkins自动部署注意事项: 安装jenkins https://blog.csdn.net/qq_37372007/article/details/81586751 1.当提示错误ERROR: ...