变量提升—函数内部中数据初始化问题
来源:互联网 发布:python教程书籍下载 编辑:程序博客网 时间:2024/05/16 19:24
今天敲完工作代码,遇见一个小问题。闲话少叙,我先上一段代码,再分析一下。
var nsame = "Sada";var name = 'World!';(function () { console.log(typeof name === 'undefined')//true if (typeof name === 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); }})();(function () { console.log(typeof nsame === 'undefined')//false})();
同样是两个自运行函数,第一个type属性是undefined,第二个却是string。
首先来看看两个函数有什么不同
1.很简单的代码,两个函数,全局声明的变量name,nsame,都是字符串类型,问题明显不在这里。
2.函数外部原因排除,再看看内部有什么不同:
if (typeof name === 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); }
也只不过多出这么一段if–else–判断语句,而且其中涉及到相同的name变量的声明。先来看看我们改变内部name的使用。看下面一段代码
var nsame = "Sada";var name = 'World!';(function () { console.log(typeof name)//string if (typeof name === 'undefined') { var names = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name);//运行 Hello World! }})();(function () { console.log(typeof nsame === 'undefined')//false})();
这时候问题消失,两者运行结果相同,都读取到了外部变量name或者是nsame。这时候我们逐渐知道了问题的关键。看下边简化问题后的代码,再进行分析。
var name = 'World!';function ss() { console.log(typeof name)//undefined var name = 'Jack'; console.log('Goodbye ' + name);//Goodbye Jack};
问题就在这里了,var 声明的作用域在整个 function 中, 但并没有初始化。也就是变量提升。
function ss () { var name; // 变量提升,函数作用域范围内 console.log(name); name = 'aaa'; console.log(a);}ss();
除此之外,还存在函数提升
console.log(f1); // function f1() {} console.log(f2); // undefined function f1() {}var f2 = function() {}
总结 很简单的东西,不注意还是会被坑。祝大家好运。。。
阅读全文
0 0
- 变量提升—函数内部中数据初始化问题
- JavaScript—变量提升、函数提升
- 变量提升/函数提升
- 构造函数中成员变量初始化顺序问题
- 51单片机定时器中断函数中变量初始化的问题
- 变量提升与函数提升
- 变量提升和函数提升
- 变量提升与函数提升
- Js中有关变量声明和函数声明提升的问题
- 构造函数初始化成员变量问题
- javascript 变量/函数 提升
- 变量函数声明提升
- js 变量、函数提升
- 函数和变量提升
- 变量和函数提升
- 一个可以不传参数就可以在函数中改变调用者内部的变量数据的函数
- C++中变量的初始化问题
- c++ 类中static变量初始化问题
- centos 桥式连接
- js 数组赋值问题 :值传递还是引用?
- 如何取得用户参数文件中的parameters
- 有输入框时退出Activity导致前一个界面的布局被顶上去问题
- MySQL基本的增删改查
- 变量提升—函数内部中数据初始化问题
- YOLO算法的调整与优化
- Spring @Import注解
- Less的条件表达式
- vi 编辑器的使用 习题
- Android—WIFI开发流程
- PHP 长字符串(<<<heredoc)
- 图像拼接
- 文章1、Linux、centos