js中的变量的作用域
来源:互联网 发布:c语言voidmain怎么用 编辑:程序博客网 时间:2024/06/05 20:42
在JavaScript中,作用域一般分成四种:全局作用域,词法作用域,动态作用域,函数作用域;
一)全局作用域:
变量的生命周期:该变量多长时间内保持有值状态;
全局变量:该变量存活的时间很长,且在整个程序中都能被访问到;
ps:在全局作用域中定义或者没有var定义的变量都是全局变量;
二)词法作用域:
定义:函数在定义时,当前的作用域或变成函数的内部属性,在函数被调用时所运行的作用域是当初被定义时的作用域,而不是函数被调用时所处在的作用域;
特点:函数被调用时,先从内部的词法作用域寻找变量,如果没有则通过作用域链寻找变量;
function A(){ var a=1; var b=2; return function(){ a=3; console.log(a+"and"+b); } } A()();三)动态作用域:
定义:函数内部的作用域调用了函数外界的作用域对象(包括全局对象或者局部对象);
本质:动态作用域其实就是值得全局表映射;
eg:
function makBindFun(resolve){ return function(k,v){ var arr=obj[k]||[]; obj[k]=resolve(arr,v); } } function A(k){ console.log(obj[k]);//在A函数总访问了外部的对象 } (function(){ var B=makeBindFunc(function(arr,v){ arr.push(v); return arr; }); B("a",1); A("a"); })()
缺点:动态作用域不太稳定,内部的值可能随时都被改变;
this:
定义:是指当前函数所在的作用域对象,一般是指window对象,也可以是指向封装好包含该函数的对象;
好处:每个声明的函数都具备this(即this指向是有意义的),因此可以动态改变this的指向;
eg:
window.name="dc";let obj={name:"dragon"};function A(){ console.log(this.name);}A()------>dc;A.bind(obj)()------>dragon
case2:callback函数中的this是没有意义的,必须引进指定的作用域才有意义;
四)函数作用域:定义:在函数所有var的声明变量在函数内处处可见,即变量的声明会提升到作用域顶部(变量提升);
阅读全文
0 0
- js中的变量的作用域
- js变量的作用域
- 变量的作用域js
- js的变量作用域
- js变量的作用域
- js 变量的作用域
- js的变量作用域
- JS的变量作用域
- JS的变量作用域
- 深入理解JS中的变量作用域
- 深入理解JS中的变量作用域
- 深入理解JS中的变量作用域
- 深入理解JS中的变量作用域
- 深入理解JS中的变量作用域
- js中的作用域及私有变量
- js 变量作用域
- js变量作用域
- js变量作用域
- Hive(3)-内部表外部表测试
- 【基础中心】笔记四--Oracle序列获得和插入数据库的值不同
- onSaveInstanceState和onRestoreInstanceState被调用
- 通过capable给字符设备添加root权限
- JavaScript中函数声明与函数表达式的区别详解
- js中的变量的作用域
- WPF command
- 消息队列与JMS
- Linux之history指令
- 清华大学2007年机试-10进制 VS 2进制-1208
- 堆排序算法--Java实现
- QT 编写Qt多窗口程序
- KBEngine服务端源码分析笔记
- 【h1】handlebars.js使用时渲染空白