要说js的赋值方式时首先要说明js的数值类型:基本类型和引用类型。
1、基本类型
基本的数据类型有:undefined,boolean,number,string,null。 基本类型存放在栈区,访问是按值访问的,就是说你可以操作保存在变量中的实际的值。
当基本类型的数据赋值时,赋得是实际的值,a和b是没有关联关系的,b由a复制得到,相互独立。(字面量的才是基本类型)
var a=10
var b=a
console.log(a+','+b) // 10,10
a++
console.log(a+','+b) // 11,10
2、引用类型
引用类型指的是对象。可以拥有属性和方法,并且我们可以修改其属性和方法。引用对象存放的方式是:在栈中存放对象变量标示名称和该对象在堆中的存放地址,在堆中存放数据。
对象使用的是引用赋值。当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在堆中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。
3、数组是引用类型
我们先来看一个例子:
var a = [1,2,3]
var b = a
a = [4,5,6]
alert(b) //[1,2,3]
好像数组是基本类型一样。。,但是:
var a = [1,2,3]
var b = a
a.pop()
alert(b) //[1,2]
这是怎么回事?因为:(知乎解释)
a = [4,5,6]//改变的是a引用本身,没有改变数组对象,a和b没有了关系。
a.pop()//改变的是数组对象,a引用没有改变。
b = a//该操作后,b直接指向数组对象,不是b指向a,a再指向数组。
//所以改变a引用并不会对b引用造成影响,改变数组对象可以。
这个问题就跟我之前在React todo-list 一篇中提到的问题一样:
var tasks=this.state.data
tasks=tasks.filter(function(i){
return i.index!=taskId
})
由于filter函数是返回一个新的数组,虽然仍然用tasks去接收,但这时候tasks的指向已经是新数组啦,所以tasks和data已经不在有关系。(concat也是返回新数组)
而push和splice函数是在原数组上操作,所谓在原数组操作,指的是指向不变,所以tasks和data是相关联的。
4、参数传递
js的函数参数传递为值传递。
当传入的是 基本类型的参数时:就是复制了份内容给i而已,i与age之间没有关系。
function setAge(i)
{
alert(i)//24
i = 18
alert(i)//18,i的改变不会影响外面的age
}
var age = 24
setAge(age)
alert(age)//24
当传入的参数为引用类型时:
function setName(obj)
{
obj.name = 'haha'
}
var obj2 = new Object()
setName(obj2)
alert(obj2.name) // haha
这看起来很像是传递的是引用,因为obj.name受到改变了,但其实不是,其实还是值,因为obj2本身的值就是新对象的地址,所以传进去的就是这个地址。
这是阿里2014年的笔试题:
var a = 1
var obj = {
b: 2
}
var fn = function () {}
fn.c = 3
function test(x, y, z) {
x = 4
y.b = 5
z.c = 6
return z
}
test(a, obj, fn)
alert(a + obj.b + fn.c)
答案:12
首先test传递进去的实参中,a是基本类型(,复制了一份值),obj是object(指向地址,你动我也动),fn也当然不是基本类型啦。在执行test的时候,x被赋值为4(跟a没关系,各玩各的,a仍然为1),y的b被赋值为5,那obj的b也变为5,z的c变为6,那fn的c当然也会是6. 所以alert的结果应该是1+5+6 =12. (其实test不返回z也一样,z仍然改变的)。
将js中的值传递给html
var Value = "www.sucaijiayuan.com"
var oDiv = document.getElementById("div")
oDiv.innerHTML = Value
用innerHTML属性,这样就可以了。
扩展资料:
JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
JavaScript函数
函数是命名的语句段,这个语句段可以被当作一个整体来引用和执行。使用函数要注意以下几点:
1、函数由关键字function定义(也可由Function构造函数构造)。
2、使用function关键字定义的函数在一个作用域内是可以在任意处调用的(包括定义函数的语句前);而用var关键字定义的必须定义后才能被调用。
3、函数名是调用函数时引用的名称,它对大小写是敏感的,调用函数时不可写错函数名。
4、参数表示传递给函数使用或操作的值,它可以是常量,也可以是变量,也可以是函数,在函数内部可以通过arguments对象(arguments对象是一个伪数组,属性callee引用被调用的函数)访问所有参数。
5、return语句用于返回表达式的值。
6、yield语句扔出一个表达式,并且中断函数执行直到下一次调用next。
参考资料来源:百度百科-javascript
<script>var a=''//这个表示全局变量
function set_a(){
a='ccccc'//设置a的值
}
function get_a(){
return a
}
</script>