js作用域相关知识总结
以前总是搞不清楚js里面的作用域、块级作用域、预解析,做题总做错,今天彻底搞明白了,来记录梳理一下~
块级作用域
在其他语言中,任何一对花括号中的语句都属于一个块儿,在这之中定义的所有变量在代码块外都是不可见的。Js中没有块级作用域
一个感觉在面试中会经常遇到的问题
for(var i =0;i<10;i++){
var num = 100;
}
console.log(i); //i是多少
第一反应是i是9,但是错了,i是10。因为按照循环条件,i肯定是在0-10之间,当i=9的时候,都还在执行循环体,然后9++到10,不符合循环条件,跳出循环,所以此时i是10
变量的使用范围
1.局部变量
因为js里面没有块级作用域,当一个变量声明在函数的内部,此时这个变量叫做局部变量,它不能在函数外部被访问到
function f1(){
var num = 1000;
}
f1();
console.log(num);
2.全局变量
直接在script标签中定义的变量,或者说是不在函数中定义的变量都叫做全局变量
var num = 1000;
</script> <script>
function f1(){
console.log(num);
}
f1(); </script>
3.隐式全局变量
隐式全局变量:当一个变量声明的时候,没有使用var,那么这个变量就是隐式全局变量
注意!
通过var创建的全局变量是不可被删除的,而隐式全局变量是可以被删除的。这表明在技术上,隐式全局变量并不是真的全局变量,它们是全局对象的属性,属性是可以通过delete删除的,而变量不能。
var num = 1000;
num2 = 200;
delete num;
delete num2;
console.log(typeof num); //number 这里即使用delete删除了num,它的类型还是number 无法真正被删除
console.log(typeof num2); //undefined 而隐式全局变量很容易被删除了
变量退出作用域后会被销毁,全局变量关闭网页或浏览器之后才会被销毁/释放
function f1(){
var num = 10;
}
f1();
这个函数被调用以后,变量所占的空间就被释放了——因为这个函数被用完了
**回调函数粗略的讲解
回调函数:函数作为另一个函数的参数使用
function getSum(x,y){
return x + y;
}
function ff(x,y,fn){ //fn作为一个参数
return fn(x,y); //fn是一个函数,并且被调用了
}
var result = ff(1,5,getSum); //给fn传参
console.log(result)
函数还可以作为另一个函数的返回值调用
function f1(){
return function (){
console.log(123);
}
}
var result = f1(); //函数赋值给result
//console.log(result) 错误写法 这样只会打印出来f1的函数体
result();
little Trick
function aa(){
alert('aaaa');
return function (){
alert('bbbb');
}
} alert(aa); alert(aa()); alert(aa()());这三个结果分别是什么?
结果1 函数名打印出来是整个函数体
结果2 弹出aaaa和返回值内的匿名函数,原因是,函数被调用后内部执行了这段代码,然后匿名函数并未被调用,所以返回的是整段匿名函数体
结果3 弹出aaaa,bbbb,和undefined 匿名函数也被调用了,所以弹出了bbbb 为什么会再弹一次undefined呢~?
arguments对象
arguments是一个对象,一个伪数组,可以获取函数参数的个数
**伪数组的概念:可以使用.length,但是不可以调用数组的方法。
function f1(){
var sum = 0;
for(var i =0;i<arguments.length;i++){
sum += arguments[i]; //arguments是一个伪数组。它可以指代函数的参数
}
return sum;
}
var result = f1(10,22,11,33,155);
console.log(f1);
js作用域相关知识总结的更多相关文章
- JS作用域相关知识(#精)
在学习<你不知道的JS>一书中,特将作用域相关知识在此分享一下: #说到作用域,就不得不提到LHS查询和RHS查询: 1)如果查询目的是对变量进行赋值,则使用LHS查询 2)如果查询目的是 ...
- JS基础理论相关知识
1.XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同:XHTML 元素必须被正确地嵌套.XHTML 元素必须被关闭.标签名必须用 ...
- js作用域相关笔记
1.js引擎.编译器.作用域. 引擎:负责JS全过程的编译和执行: 编译器:负责语法分析和代码生成: 作用域:负责收集并维护声明组成的查询,以及当前执行代码对这些变量的访问权限(简言之,作用域就是用于 ...
- js数组相关知识集合
一.js数组快速排序 <script type="text/javascript"> var arr = [1, 2, 3, 54, 22, 1, 2, 3]; fun ...
- js键盘相关知识总结
一.相应事件 keydown:按下键盘上的任意键都可触发,按着不放则重复触发 keypress:按下键盘上的字符键时触发,按着不放则重复触发 keyup:释放按键时触发 事件顺序:keydown> ...
- codewars--js--vowels counting+js正则相关知识
问题描述: Return the number (count) of vowels in the given string. We will consider a, e, i, o, and u as ...
- css+js+html基础知识总结
css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...
- JS 作用域与变量提升---JS 学习笔记(三)
你知道下面的JavaScript代码执行时会输出什么吗? var foo = 1; function bar() { if (!foo) { var foo = 10; } console.log(f ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
随机推荐
- MySQL 通用查询日志和慢查询日志分析
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句.2)慢查询 ...
- 驼峰命名和下划线命名互转php实现
驼峰命名和下划线命名经常需要互转,下面提供两种php的实现方式.第一种方法效率相对差一些,实现方式如下: //驼峰命名转下划线命名 function toUnderScore($str) { $dst ...
- Docker Compose 入门使用指南
Compose is a tool for defining and running multi-container Docker applications. With Compose, you us ...
- java基础知识面试题(41-95)
41.日期和时间:- 如何取得年月日.小时分钟秒?- 如何取得从1970年1月1日0时0分0秒到现在的毫秒数?- 如何取得某月的最后一天?- 如何格式化日期?答:问题1:创建java.util.Cal ...
- c++11 类默认函数的控制:"=default" 和 "=delete"函数 void fun() = default; void fun()=delete;
转自:lsgxeva #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #includ ...
- E题:Water Problem(快速幂模板)
题目大意:原题链接 题解链接 解题思路:令x=x-1代入原等式得到新的等式,两式相加,将sin()部分抵消掉,得到只含有f(x)的状态转移方程f(x+1)=f(x)+f(x-2)+f(x-3),然后 ...
- Mkdocs 搭建
1. 利用pip安装mkdocs sudo pip install mkdocs 2.如果报pip不存在 或是 报权限错误,要不是pip没有安装,就是python里某个库没有关联上,这时候需要重新安装 ...
- Android 多媒体MediaPlayer使用详解
现在的手机功能越来越丰富了,遥想10年前,MP3,MP4,MP5,还是很流行的,博主当时读高中时很想拥有一台,可以听音乐和看电影.可是条件有限,学校也禁止此东西,所以只能偷偷的玩.而现在我们的手机也很 ...
- HTML5实现手机QQ表情功能
主要素材和JS来自QQ空间触屏版( http://m.qzone.com ),我只是代码的搬运工.代码下载. 预览请使用较新版的Chrome,然后启用开发者工具,设备模式.详见:(http://www ...
- imx6------watchdog导致不进系统
刚上板子,把大部分驱动都停了,不过watchdog的驱动没停,当时想没应用程序所以watchdog不用管,没想到 就是watchdog卡住了,有程序open了watchdog但是没有write,结果t ...