js变量提升的坑
关于js变量提升
变量提升
在js函数内部是可以直接修改全局的变量的,个人感觉是不好的设计, 但是确实存在这个概念
原理:
- 先查看有没有函数变量bb
- 查看形参有没有bb
- 查看全局有没有bb
- 报错, 找不到bb变量
修改函数内部
var bb = 1;
function foo(cc){
var bb = 2; // 这里的bb, 其实是函数的局部变量
console.log(cc);
}
foo(bb); // 1
console.log(bb); // 1
修改的是形参
var bb = 1;
function foo(bb){
bb = 2; // 这里看起来像是变量提升, 但其实是修改的形参, 不会影响到全局变量
console.log(bb);
}
foo(bb); // 2
console.log(bb); // 1
修改的是全局
var bb = 1;
function foo(cc){
bb = 2; // 这里的bb, 其实是修改了全局的变量bb
console.log(cc);
}
foo(bb); // 1
console.log(bb); // 2
js变量提升的坑的更多相关文章
- js 变量提升+方法提升
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JS 变量提升与函数提升
JS 变量提升与函数提升 JS变量提升 变量提升是指:使用var声明变量时,JS会将变量提升到所处作用域的顶部.举个简单的例子: 示例1 console.log(foo); // undefined ...
- js变量提升与函数提升的详细过程
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- JS变量提升和作用域
一.JS变量提升 1.当浏览器引擎解析js代码时,将js中的所有一开始就是var声明的和function声明的都提升到全局.此时又叫全局作用域 console.log(aa); console.log ...
- 关于JS变量提升的一些坑
function log(str) { // 本篇文章所有的打印都将调用此方法 console.log(str); } 函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 变量声明.命名 ...
- js 变量提升和函数提升原理
关于js的变量,开始的时候我们都会被告知,变量声明应该在引用该变量之前.关于为什么要这样做呢,开始的时候本着会用就行的目的,也没去深究.不过后来经常会发现一些让人很费解的..姑且称为现象吧.先看一段代 ...
- JS 变量提升
var a = 1; function foo() { console.log(a); var a = 2; } foo(); //undefined 根据变量提升机制,最后得出undefined; ...
- js变量提升与函数提升
在es6之前,js语言并没有块级作用域,即{}形成的作用域,只有全局作用域和函数作用域,所谓的提升,即是将该变量的声明或者函数的声明提升,举个例子 console.log(global); //und ...
- js变量提升小记
作为世界上最优美的语言javascript的使用者,呵呵,js的魅力是无穷的,今天来聊聊他的魅(dan)力(teng)之一,变量提升. 每种语言所定义的变量基本都会有一定得作用域,而js的作用域则存在 ...
随机推荐
- jQuery---html方法和text方法
html方法和text方法 //html:innerHTML text:innerText console.log($("div").html());//<h3>我是标 ...
- Qt Installer Framework翻译(7-7)
脚本API 下表总结了可以在控制器和组件脚本中使用的全局JavaScript对象. QMessageBox 提供一个模式对话框,通知用户或询问用户问题并接收答案 buttons 提供可在安装程序页面上 ...
- adworld MISC002 | Linux的挂载文件系统的运用
EXT3是第三代扩展文件系统(英语:Third extended filesystem,缩写为ext3),是一个日志文件系统,常用于Linux操作系统. Plan 1: 直接将附件使用mount命令挂 ...
- C语言 goto
C语言 goto 功能:无条件跳转.不推荐使用 案例 #include <stdio.h> int main() { // 函数跳转.循环跳转 // 创建标志位开始 // 无条件跳转到En ...
- C# 修改/新建判断
//查询有无重复(新建用) public List<bloodBreedDetailsEntity> CodeList(string code) { var expression = Ex ...
- jmeter请求报错
jmeter发送json数据,报405.400错误解决方案: https://www.cnblogs.com/sunny-sl/p/8044284.html 405:Content-Type不对 40 ...
- mybatis一对多 多对一 多对多
https://blog.csdn.net/AdminGuan/article/details/98952484 Mybatis的Mapper该如何编写多对一? 很简单,就是在resultMap标 ...
- IDEA编写shell脚本并运行
1.去官网下载IDEA开发工具 https://www.jetbrains.com/idea/ 2.打开IDEA并安装bashsupport插件 3.安装完插件重启IDEA 4.下载git工具 htt ...
- 操作系统-多用户如何理解(Linux)
单用户.多用户.单任务.多任务,这么多种操作系统容易让人迷糊.其实这种初看你会觉得理解了一点,但其实你仔细研究会发现,多用户到底讲的是什么鬼? 多任务比较简单,就是应用程序都要放置到内存上去给CPU调 ...
- Django 基本使用及目录结构
1.安装 pip3 install django 默认为最新版 2.创建Django项目 在即将创建的Django项目,目录下运行命令 1.django-admin startproject my_p ...