第24天:js-函数变量声明提升
一、函数声明
1、自定义函数
function fun1(){
alert("我是自定义函数");
}
fun2();//函数不调用,自己不执行
2、直接量声明
var fun2=function(){
alert("直接量声明");
}
fun2();
3、利用Function关键字声明
var fun3=new Function("var a=10;b=20;alert(a+b)");
fun3();
二、变量声明提升
如果在一个函数体内部声明了一个变量,不管这个变量函数外部有没有,先执行函数内部的变量,会将变量声明提升到函数开始部分,但是不会赋值。
在函数体内部声明变量,会把该声明提升到函数体的最顶端。但是只提升变量声明,不赋值。
var num=10;
fun1();
function fun1(){
console.log(num);
var num=20;//变量提升
}//undefined
相当于
var num=10;
fun1();
function fun1(){
var num;
console.log(num);
num=20;
}
三、函数传参
函数实参个数要与形参个数相同,arguments.length可以获取函数实参的个数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*变量提升*/
/*window.onload=function(){
var num=10;
fun1();
function fun1(){
console.log(num);
var num=20;//变量提升
}
}//结果:undefined*/ /*var a=18;
f1();
function f1(){
var b=9;
console.log(a);
console.log(b);
var a='123';
}//undefined,9
*/
/*函数传参*/
/*function f1(a,b){
console.log(a+b);
}
f1(1,2);//3
f1(5);//NaN*/ /*检测函数参数个数匹配*/
function fn(a,b){
console.log(fn.length);//获取函数形参的个数
console.log(arguments.length);//得到的是实参的个数
if(fn.length==arguments.length){
console.log(a+b);
}else{
console.log("对不起,您的参数不匹配,正确的参数个数为:"+fn.length);
}
}
fn(5,3);//2,2,8
fn(2,3,4)//2,3,"对不起..." </script>
</head>
<body> </body>
</html>
第24天:js-函数变量声明提升的更多相关文章
- 变量声明提升 Vs. 函数声明提升
1. 变量声明提升 先看以下代码: 1)var in_window = "a" in window; console.log(in_window); 2)var in_window ...
- javascript变量声明提升和函数声明提升
在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分. JS的解析过程分为两个阶段:预 ...
- 解读JavaScript中的Hoisting机制(js变量声明提升机制)
hoisting机制:javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 知识点一:javascript是没有 ...
- js变量声明提升
1.变量提升 根据javascript的运行机制和javascript没有块级作用域这个特点,可以得出,变量会声明提升移至作用域 scope (全局域或者当前函数作用域) 顶部的. 变量声明提升至全局 ...
- [Effective JavaScript 笔记] 第12条:理解变量声明提升
js支持词法作用域,即除了极少的例外,对变量的引用会被绑定到声明变量最近的作用域中. js不支持块级作用域,即变量定义的作用域并不是离其最近的封闭语句或代码块,而是包含它们的函数. 不了解这个会产生一 ...
- JS作用域理解(声明提升)
1.JS解析步骤: a.预解析 将变量声明提升: 将函数声明及函数内容提升,可以理解成原来位置的函数在解析代码时已经提到代码初始位置: 块内的变量声明和函数声明也会被提升,例如if语句 遇到重名,只留 ...
- JavaScript 变量声明提升
JavaScript 变量声明提升 一.变量提升的部分只是变量的声明,赋值语句和可执行的代码逻辑还保持在原地不动 二.在基本的语句(或者说代码块)中(比如:if语句.for语句.while语句.swi ...
- 浅谈JavaScript变量声明提升
前段时间阿里实习生内推,一面就被刷了,也是郁闷.今天系统给发通知,大致意思就是内推环节不足以了解彼此,还可以参加笔试,于是赶紧再投一次.官网流程显示笔试时间3月31日,时间快到了,开始刷题.网上搜了一 ...
- JavaScript变量声明提升
JavaScript代码在被解析引擎执行前,会被“编译”把变量声明等放在合适的作用域中,如果不了解这一点,会让人产生很多疑惑. 文章:详解js变量声明提升
随机推荐
- bedtools-Documentation
https://media.readthedocs.org/pdf/bedtools/latest/bedtools.pdf
- tensorflow 教程 文本分类 IMDB电影评论
昨天配置了tensorflow的gpu版本,今天开始简单的使用一下 主要是看了一下tensorflow的tutorial 里面的 IMDB 电影评论二分类这个教程 教程里面主要包括了一下几个内容:下载 ...
- .Net 面试题 汇总(六)
一.填空题 1.面向对象的语言具有(继承)性.(多态)性.(封装)性. 2.能用foreach遍历访问的对象需要实现 (IEnumberable)接口或声明(GetEnumberator)方法的类型. ...
- 笔记-django第一个项目
笔记-django第一个项目 1. 创建项目 安装 Django 之后,现在有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 看下djang ...
- javascript array.property.slice.call
function foo() { //var var1=Array.prototype.slice.call(arguments); var var1=[].slice.call(arguments) ...
- Redis的n种妙用,不仅仅是缓存
redis是键值对的数据库,常用的五种数据类型为字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset) Redis用作缓存,主要两个用途: ...
- ORB-SLAM(十)LoopClosing Sim3求解
主要参考这篇论文 Horn B K P. Closed-form solution of absolute orientation using unit quaternions[J]. JOSA A, ...
- “地表最贵iPhone”到货,iPhone XS 系列手机等你来测!
WeTest 导读 9月13日,苹果正式发布了全新的 iPhone XS 系列智能手机,备受瞩目的iPhone家族新成员具体又是怎样的呢? 关于iPhone XS系列手机的那些新亮点 大屏.双 ...
- 「专题训练」Machine Schedule(HDU-1150)
题意 在一个工厂,有两台机器\(A, B\)生产产品.\(A\)机器有\(n\)种工作模式(模式\(0\),模式\(1\)--模式\(n-1\)).\(B\)机器有\(m\)种工作模式(模式\(0\) ...
- leetcode-第k个排列(Java和c++版)
第k个排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" " ...