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. C++之开灯问题(链表)

    有n盏灯,编号为1~n.第1个人把所有灯打开,第2个人按下所有编号为2的倍数开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,以此类推.一共有k个人,问最后有哪些灯开着?输入n和k,输出开 ...

  2. C++中几种字符串表示方法

    最近学习C++时,被几种字符串搞的有点乱,这里记录一下. c++中有两种风格字符串,分别是: C++风格字符串 C风格字符串 它们各自的声明方式如下: void main(){ string a = ...

  3. C语言 小球撞击反弹

    计算法(略) #include <stdio.h> #include <stdlib.h> int main() { int x, y, a, resu; scanf(&quo ...

  4. Vivado关联Notepad++

    Vivado自带的编辑器非常难看,我习惯用Notepad++,这里记录一下二者的关联. 1.打开Vivado,点击 Tools --- Settings --- Text Editor,右侧选择 Cu ...

  5. Go ---- defer 和 return 执行的先后顺序

    Go 中 defer 和 return 执行的先后顺序 多个defer的执行顺序为“后进先出”: defer.return.返回值三者的执行逻辑应该是:return最先执行,return负责将结果写入 ...

  6. C# 读取Oracle数据库视图数据异常问题处理

    会出现类似现在这种提示的错误 System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本 情况1.开发过程中遇到这种问题解决 由于.net ...

  7. React 语法

    1.JavaScript XML JSX = JavaScript XML,是一个看起来很像 XML 的 JavaScript 语法扩展.JSX 不是模板,是JS语法本身,有更多的扩展.JSX 组件一 ...

  8. Installation of SAP on RAC with Oracle ASM(转)

    https://blogs.sap.com/2016/03/17/installation-of-sap-on-rac-with-oracle-asm-part-3distributed-enviro ...

  9. SAP Hybris Commerce启用customer coupon的前提条件

    今天在工作中,我发现一个问题:在SAP帮助文档里,backoffice coupon 维护界面有个 Customer Assignment的区域: 而我工作的Hybris服务器上的backoffice ...

  10. 二十七、mysql如何确保数据不丢失?有几点值得我们借鉴

    本篇文章我们先来看一下mysql是如何确保数据不丢失的,通过本文我们可以了解mysql内部确保数据不丢失的原理,学习里面优秀的设计要点,然后我们再借鉴这些优秀的设计要点进行实践应用,加深理解. 预备知 ...