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——函数的作用域及变量提升的更多相关文章

  1. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  2. JavaScript 基础(五) 函数 变量和作用域

    函数定义和调用 定义函数,在JavaScript中,定义函数的方式如下: function abs(x){ if(x >=0){ return x; }else{ return -x; } } ...

  3. Javascript基础回顾 之(二) 作用域

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  4. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  5. javascript中的变量作用域以及变量提升详细介绍

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...

  6. JS 函数作用域及变量提升那些事!

    虽然看了多次js函数作用域及变量提升的理论知识,但小编也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷) ...

  7. JS _函数作用域及变量提升

    虽然看了多次js函数作用域及变量提升的理论知识,但也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷)&g ...

  8. Javascript作用域和变量提升

    下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是10: 那么 ...

  9. javascript基础03

    javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...

随机推荐

  1. Word 图片表格自动编号、交叉引用、批量更改图片标题格式、生成图录和表录

    1. 前言 论文往往里往往需要插入很多图片,下放需要标上 图a-b,其中 a 是章节号码,b是该章节中第几张图.比如第一章第二副图就是 图1-2.但是有个问题,每次我们插入了一张图或删掉了一张,前后的 ...

  2. Word页眉实现首页不同、奇偶页不同 、更改页眉横线、页眉文字对齐 -- 视频教程(8)

    1. 目标 目标1:实现页眉"首页不同,奇偶页不同" 目标2:更改页眉横线 目标3:页眉文字有三部分:第一部分左对齐,第二部分居中,第三部分右对齐 2. 教程 未完 ...... ...

  3. STM32串口复用关系&printf重定义

    串口复用 什么是普通功能输入输出?普通功能输入输出类似于:大厅<—>门<—>室外的关系,大厅只需要经过大门即可到室外,从室外经过门也可以到达大厅. 什么是复用工功能输入输出?复 ...

  4. leetcode动态规划笔记二

    动态规划 题目分类 一维dp 矩阵型DP Unique Paths II : 矩阵型DP,求所有方法总数 Minimum Path Sum:矩阵型,求最大最小值 Triangle : 矩阵型,求最大最 ...

  5. (五)pdf的构成之文件体(catalog对象)

    引自:https://blog.csdn.net/steve_cui/article/details/82735039 目录(catalog): 文档目录包含对定义文档内容的其他对象的引用.它还包含声 ...

  6. Selenium+Java(七)Selenium对话框的处理

    HTML代码如图所示: 一.alert String url = "file:///C:/Users/ex_yuhao/Desktop/index.html"; //引用IE浏览器 ...

  7. MOOC 数据库笔记(四):关系代数

    关系代数 关系代数概述 特点 基于集合,提供了一系列的关系代数操作:并.差.笛卡尔积(广义积).选择.投影和更名等基本操作 以及交.连接和关系除等扩展操作,是一种集合思维的操作语言. 关系代数操作以一 ...

  8. python 1.使用djano前的提前准备:虚拟环境 virtualenv

    首先想要学习django我们就得了解一下虚拟环境,什么是虚拟环境?他有什么用? 1.首先虚拟环境就相当于一个一个的盒子,这个盒子里面安装的软件不会对其他的盒子造成任何影响. 2.如果你现在用Djang ...

  9. 连续子数组的最大乘积及连续子数组的最大和(Java)

    1. 子数组的最大和 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.例如数组:arr[]={1, 2, 3, -2, ...

  10. 【vue】vue生命周期---精简易懂-----【XUEBIG】

    主要的生命周期函数分类:    - 创建期间的生命周期函数:(只会调用一次)       + beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属 ...