[js]变量声明、函数声明、函数定义式、形参之间的执行顺序
一、当函数声明和函数定义式(变量赋值)同名时
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]变量声明、函数声明、函数定义式、形参之间的执行顺序的更多相关文章
- Java(静态)变量、(静态)代码块、构造方法的执行顺序
Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执 ...
- js变量的作用域与函数作用域
引自 1. 变量的作用域(var与let的区别) 在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问.在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问. E ...
- JavaScript(1)——变量、函数声明及作用域
这是我的第一篇博客文章,本人不才,文笔也不好,所以可能写的有点凌乱.有什么不对的地方还望见谅.不过每天进步一小步,总有一天会迈出那一大步.以下内容是我对变量.函数声明及函数表达式.作用域的理解. [变 ...
- JS变量和函数的一些理解
今日看了下JS变量的一些文章,有些感触,把自己总结的一些写出来. JS初始化的过程1.JS解释器执行代码之前,创建全局变量2.用预定义的值和函数来初始化全局对象中的属性,3.搜索函数外的var声明,创 ...
- sql 聚合函数用法,及执行顺序
聚合函数无法用在where子句中 , 聚合函数包括count avg sum min max 子句执行顺序from -> where -> group by -> having -& ...
- java代码块,静态代码块,静态变量,构造方法执行顺序
一个类中执行顺序: 静态变量静态代码块代码块构造方法 子类和父类执行顺序: 父类静态变量父类静态代码块子类静态变量子类静态代码块父类代码块父类构造方法子类代码块子类构造方法 直接看代码,一目了然. p ...
- js中页面加载完成后执行的几种方式及执行顺序
1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前两者本质上没有区别,第1种是第2种的简写方式.两个是docu ...
- ASP.NET相关事件及JS的执行顺序
实验代码: ASPX: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="We ...
- js中页面加载完成后执行的几种方法及执行顺序
在js和jquery使用中,经常使用到页面加载完成后执行某一方法.通过整理,大概是五种方式(其中有的只是书写方式不一样). 1:使用jQuery的$(function){}; 2:使用jquery的$ ...
随机推荐
- Linux 注意
1. 赋值运算符= 左右之间不能加空格, 其余的都可以加空格, 而这种限制在以下情况, 可以使用空格 let "n = $1" 虽然也是赋值语句, 但是可以使用空格
- python使用open经常报错:TypeError: an integer is required的解决方案
错误是由于从os模块引入了所有的函数导致的,os模块下有一个open函数,接受整型的文件描述符和打开模式,from os import *引入os模块的open函数,覆盖了python内建的open函 ...
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...
- Java用webSocket实现tomcat的日志实时输出到web页面
原文:http://blog.csdn.net/smile326/article/details/52218264 1.场景需求 后台攻城狮和前端攻城狮一起开发时,经常受到前端攻城狮的骚扰,动不动就来 ...
- 转:不是技术牛人,如何拿到国内IT巨头的Offer
转自:http://blog.csdn.net/lsldd/article/details/13506263 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛 ...
- PostgreSQL 8.1 中文文档(转)
PostgreSQL 8.1 中文文档(转) http://www.php100.com/manual/PostgreSQL8/ 或者点击下面链接 PostgreSQL 8.1 中文文档
- Android 为PopupWindow设置动画效果
首先定义显示效果的动画文件: <?xml version="1.0" encoding="utf-8"?> <set xmlns:androi ...
- 堆排序(C语言)
#ifndef HEAP_SORT_H #define HEAP_SROT_H #include<iostream> void maxHeap(int *arr,unsigned int ...
- 【BZOJ 2243】染色 - 树链剖分+线段树
#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; const ...
- hibernate的懒加载问题
产生原因: 当使用hibernate查询一个对象的时候,如果Session关闭,再调用该对象关联的集合或者对象的时候,会产生懒加载异常! 解决方案: 方案一: 在Session关闭之前,查询对象关联的 ...