javascript中变量相关的若干问题
来源:互联网 发布:js 点击显示modal 编辑:程序博客网 时间:2024/06/09 18:58
JS中若干问题及解答
前言
本文涉及到的全部代码在Nodejs v6.9.5和Chrome v 61.0.3163.100中进行过验证
目录
- 前言
- 目录
- 作用域
- 变量提升
- 对象属性和变量
- 对象和函数
- this的问题
作用域
语法作用域(或者说语法作用域)和动态作用域,JS基本上是语法作用域。语法作用域顾名思义是基于语法的。语法作用域在编译阶段就确定了变量的作用范围,而动态作用域是在执行的时候才能确定变量的值。语法作用域是基于代码中的作用域嵌套来一层层的确定变量的值的,和变量在代码中的定义位置有关。而动态作用域则是在程序的执行到变量的时候才去寻找变量的值,即是动态作用域中,变量的值与调用的函数相关,是基于程序的调用栈来确定的,(和JS中的this有些类似)。但JS基本上是语法作用域的(eval()和with除外)。
function foo(){ console.log(a);}function bar(){ var a = 3; foo();}var a = 2;bar();//此时如果是动态作用域输出 3//而JS是语法作用域,所以输出 2
变量提升
重复定义
对象属性和变量
var name = "var" //var name var obj = { name:"obj_attr",//obj{name} get_name(){ console.log(name); //var console.log(obj.name); //obj_attr } }
上面代码中出现了两个name
,var name
和 obj{name}
,其中前者name是变量名,后者是obj对象的属性名,前者可以通过变量名直接访问,而后者只是对象的一个属性名,必须通过对象访问。故上文中通过name直接访问到的是作为变量的var name
,而想访问 obj{name}
只能通过obj.name
。
对象和函数
JS里最初都是function
,object
也是从function
衍生出来的。{}
是Object,同时也是Function。
声明一个对象有几种方式
函数
函数也是变量。变量名是一个标记。是对变量操作的钥匙。指针,应用,句柄都可以表达类似的意思。函数名同时也是函数变量的变量名。函数名可以理解为一个指向函数实现的入口,对外代表整个函数。可以用var foo1 = function(){...}
,以及function foo2(){...}
,来定义foo函数,foo1和foo2指向相同的函数。(注意:这两种生成函数变量的操作不同,前者是赋值后者是声明,编译阶段对他们的处理不同)JS中的函数变量是高级函数advance function,可以进行变量的操作,比如赋值,组成数组,作为属性的值,作为函数的参数。
- javascript中变量相关的若干问题
- 关于struts2的若干问题的相关意见
- P2P中打洞的若干问题
- P2P中打洞的若干问题
- LigerUI中accordion的若干问题
- P2P中打洞的若干问题
- java中日志的若干问题
- JavaScript变量声明相关
- javascript中变量的判断
- JavaScript中变量的类型
- JavaScript中变量的浅析
- javascript中变量的使用
- JavaScript中变量的类型
- linux条件变量若干问题
- java中声明变量和初始化变量的相关感想
- C/C++中函数设计的若干问题
- Hibernate应用中遇到的若干问题
- ERP项目实施中培训的若干问题
- AndroidTest Espresso初步体验
- DNN论文分享
- 数据结构--二叉树(C++)
- redis安装
- Python zip函数
- javascript中变量相关的若干问题
- Java之线程Runnable
- 什么是Restful风格?
- LeetCode 515. Find Largest Value in Each Tree Row
- Trafodion ODB性能调优
- Redis主从与集群配置
- Failed to resolve: com.android.support.fragment_mine.espresso:espresso-core:2.2.2
- 一步一步理解ioc与aop
- SSL2832 2017年11月3日提高组T1 生日宴会(二分)