在函数内部赋值和赋值函数之间有什么区别?

时间:2015-03-12 06:25:39

标签: javascript

我无法理解。也许我需要javascript概念。

var test = function() { var x = '3'; var y = '4'; };
console.log(test.x);

结果未定义

var test = function() { var x; var y; };

test.x = '3'; 
test.y = '4';

console.log(test.x);

它正在发挥作用。

我无法理解为什么。

3 个答案:

答案 0 :(得分:3)

Javascript函数是对象,因此您可以向它们添加属性。在这两种情况下,函数代码都有局部变量,这些变量在外部不可用。在第二种情况下,您可以向函数对象添加属性并像往常一样访问它们。

答案 1 :(得分:2)

在你的第一个例子中:

var test = function() { var x = '3'; var y = '4'; };

您正在创建一个声明两个局部变量的函数,这些变量只在函数中有意义。由于您从未在函数对象上创建x属性,console.log(test.x)确实是undefined

在你的第二个例子中:

var test = function() { var x; var y; };

您再次创建在函数外没有任何意义的局部变量。然后,完全与那些无关,你这样做:

test.x = '3'; 
test.y = '4';

xy的函数对象上创建属性。 xy与函数内的局部变量没有任何关系。

由于您已将这些属性添加到功能对象,因此console.log(test.x)会显示x的值。


在评论中,您已说过:

  

我想将java脚本变量发送到其他页面。并且java脚本变量必须包含成员变量。我该怎么办?

如果您的意思是,您希望使用属性创建对象,则可以这样做:

var test = {x: '3', y: '4'};

无需任何功能,例如:



var test = {x: '3', y: '4'};
snippet.log(test.x); // 3

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您还没有在第一种情况下设置对象属性,因为您没有获得任何值。试试返回。

console.log(test.x);

在另一种情况下,您正在设置object属性,然后调用其值以使其正常工作。

test.x = '3'; 
test.y = '4';

console.log(test.x);

希望这有助于你