一、当函数声明和函数定义式(变量赋值)同名时

function ledi(){
alert('ledi1');
};
ledi();
var ledi = function (){
alert('ledi2');
};
ledi();

执行顺序:

var ledi;
function ledi(){
alert('ledi1');
};
//预编译结束
==============
ledi();
ledi = function (){
alert('ledi2');
};
ledi();

函数声明覆盖变量声明,但不会覆盖其值,然后按顺序执行代码,输出ledi1,紧接着将ledi变量重新赋值即初始化,输出ledi2

二.变量,形参同名同时出现时

var num1 = 1;
function fn(num3){
console.log(num1);
console.log(num3);
console.log(num4);
console.log(num2);
var num1 = num4 = 2;
num2 = 3;
var num3= 5;
}
fn(4);

预编译阶段:声明变量num1和函数fn,函数fn中也要进行预编译,定义变量num1和num3

正式执行:

1.console.log(num1);

这时候num1虽然定义了但还没赋值,所以输出undefined

2.console.log(num3);

这时候num3定义了也没赋值,但是参数传了4进来,执行顺序是参数>变量,所以输出4

但要注意,如果var num3= 5;这句话在console.log(num3);前面,即使参数传进来,依然输出变量的值即5

3.console.log(num4);

连续赋值操作,除了第一个变量以外的变量都被视为全局变量处理,但是因为全局变量没有定义,所以报错"num4 is not defined"

如果num4=2;这句话在console.log(num4);前面了,那就输出2

4.console.log(num2);

全局变量同理,报错"num2 is not defined"

三.变量声明、函数声明、形参同时出现

function aa(a,b,c){
function a(){}
console.log(a);
console.log(aa);
console.log(arguments);
var a="ee";
var aa="444";
arguments=6;
console.log(a);
console.log(aa);
console.log(arguments);
}
aa(1,2,3)

1.console.log(a);

变量a声明了但未赋值,被同名形参覆盖,此时a为1,但是又被同名函数覆盖,所以输出function a(){}

2.console.log(aa);

变量aa声明了但未赋值,所以输出undefined

3.console.log(arguments);

传了参数1,2,3进来,本来输出[1,2,3],但是同名函数a覆盖了参数,所以输出[a(),2,3]

后三句因为重新赋值,所以相继输出

ee

444

6

[js]变量声明、函数声明、函数定义式、形参之间的执行顺序的更多相关文章

  1. Java(静态)变量、(静态)代码块、构造方法的执行顺序

    Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执 ...

  2. js变量的作用域与函数作用域

    引自 1. 变量的作用域(var与let的区别) 在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问.在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问. E ...

  3. JavaScript(1)——变量、函数声明及作用域

    这是我的第一篇博客文章,本人不才,文笔也不好,所以可能写的有点凌乱.有什么不对的地方还望见谅.不过每天进步一小步,总有一天会迈出那一大步.以下内容是我对变量.函数声明及函数表达式.作用域的理解. [变 ...

  4. JS变量和函数的一些理解

    今日看了下JS变量的一些文章,有些感触,把自己总结的一些写出来. JS初始化的过程1.JS解释器执行代码之前,创建全局变量2.用预定义的值和函数来初始化全局对象中的属性,3.搜索函数外的var声明,创 ...

  5. sql 聚合函数用法,及执行顺序

    聚合函数无法用在where子句中 , 聚合函数包括count avg sum min max 子句执行顺序from -> where -> group by -> having -& ...

  6. java代码块,静态代码块,静态变量,构造方法执行顺序

    一个类中执行顺序: 静态变量静态代码块代码块构造方法 子类和父类执行顺序: 父类静态变量父类静态代码块子类静态变量子类静态代码块父类代码块父类构造方法子类代码块子类构造方法 直接看代码,一目了然. p ...

  7. js中页面加载完成后执行的几种方式及执行顺序

    1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前两者本质上没有区别,第1种是第2种的简写方式.两个是docu ...

  8. ASP.NET相关事件及JS的执行顺序

    实验代码: ASPX: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="We ...

  9. js中页面加载完成后执行的几种方法及执行顺序

    在js和jquery使用中,经常使用到页面加载完成后执行某一方法.通过整理,大概是五种方式(其中有的只是书写方式不一样). 1:使用jQuery的$(function){}; 2:使用jquery的$ ...

随机推荐

  1. mysql概要(五)union

    1.union,union all;合并不像表联合那样记录之间交叉组合而是插入新记录的效果 union:有个特性是会去重复,如果两个结果出现相同一条记录会被忽略掉一条. uniion all:将不会出 ...

  2. (一)linux常见命令

    一.chmod 修改文件权限 每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读.写和执行权限:与属主同组的用户的读.写和执行权限:系统中其他用户的读.写和执行权限.横线代表空许可. ...

  3. 【linux命令】grep

    1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局 ...

  4. C#_abstract的用法

    /// <summary> /// 抽像类 /// </summary> public abstract class Hello { private string msg = ...

  5. json遍历key value

    http://blog.csdn.net/lanshengsheng2012/article/details/17679487 public static void main(String[] arg ...

  6. js树目录结构

    jstree https://www.jstree.com/demo/ treejs http://www.treejs.cn/v3/demo.php#_206

  7. Hive优化

    hive.optimize.cp=true:列裁剪hive.optimize.prunner:分区裁剪hive.limit.optimize.enable=true:优化LIMIT n语句hive.l ...

  8. ogre入门笔记

    ogre作为一款开源的非商业渲染引擎, 除去效率不谈, 其设计结构十分优雅, 值得游戏从业者拥有和学习.本篇笔记基于ogre v1.9. 1.代码模块 ogre的核心代码分布如下图: ogreMain ...

  9. Supervisor管理列队

    学习了使用 Beanstalkd 管理队列之后,Supervisor 则是用来监听队列的任务,并在队列存在任务的情况下自动帮我们去执行,免去手动敲 php artisan queue:work 的命令 ...

  10. Js作用域链及变量作用域

    要理解变量的作用域范围就得先理解作用域链 用var关键字声明一个变量时,就是为该变量所在的对象添加了一个属性. 作用域链:由于js的变量都是对象的属性,而该对象可能又是其它对象的属性,而所有的对象都是 ...