我对javaScript函数感到困惑

时间:2013-03-06 14:18:06

标签: javascript function

所以这是一些代码

var name = 'ali';

function say() {
  alert(name);
}

所以这会警告'ali',因为名称函数现在由全局对象拥有以下代码

var oobj  { 
  var name: 'raziq',
  say:function () {
    alert (name);
  }
}

oobj.say();

所以现在say函数归oobj对象所有,所以name属性应警告'raziq' 而不是'阿里'。顺便说一句,我知道使用这个关键字

我的问题是什么会被提醒和y?

3 个答案:

答案 0 :(得分:8)

--- ---更新

基本上,一个是变量,一个是属性。您可以通过两种不同的方式访问它们

在您的问题中,您声明了一个变量name和一个函数。在任何时候,如果您没有专门重新定义name,那么它将始终是该值。

在您的情况下,您认为在执行

时正在重新定义name
var oobj = {
    name: 'raziq'

但你不是。您正在声明oobj对象的属性。即如果我尝试从对象外部提醒名称,它将查找名称的变量声明,它将找到您设置为“ali”的全局变量。要获得property名称,您必须告诉它找到它的“路径”。路径为oobj.name

你在一个物体内,所以你不要使用var =;。您使用逗号,,而只需say: function() {

var oobj = {
    name: 'raziq',
    say: function () {
        alert(this.name);
    }
}
oobj.say();

答案 1 :(得分:1)

由于杰夫已经发布了正确答案,我只是想指出,即使是第一个例子也没有按预期工作。内部alert将显示name函数。

所以这个:

function name() {
  alert(name);
}

name()

将提醒消息:

function name() {
  alert(name);
}

答案 2 :(得分:0)

也许你正在寻找这个

var oobj = { 
    name : 'raziq',
    say : function (){
            alert (oobj.name);
        }
}

oobj.say();

查看updated fiddle exampleextended fiddle example