te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - What is the difference between Uncaught ReferenceError and undefined? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - What is the difference between Uncaught ReferenceError and undefined? - Stack Overflow

programmeradmin2浏览0评论

In the following code, there are two instances of "undefined":

A:

b();
console.log(a);

var a = "Hello World!";

function b() {
 console.log("Called b!");    
}

This causes the console to show "Undefined" for "a".

B:

b();
console.log(a);

function b() {
 console.log("Called b!");    
}

This creates "Uncaught ReferenceError: a is not defined". In both cases a is undefined, and the console tells you that. But why does it choose to do it in different ways depending on the context? Are there a couple forms of "undefined" besides undefined and null?

In the following code, there are two instances of "undefined":

A:

b();
console.log(a);

var a = "Hello World!";

function b() {
 console.log("Called b!");    
}

This causes the console to show "Undefined" for "a".

B:

b();
console.log(a);

function b() {
 console.log("Called b!");    
}

This creates "Uncaught ReferenceError: a is not defined". In both cases a is undefined, and the console tells you that. But why does it choose to do it in different ways depending on the context? Are there a couple forms of "undefined" besides undefined and null?

Share Improve this question asked Mar 4, 2016 at 15:06 Bar AkivaBar Akiva 1,2093 gold badges16 silver badges27 bronze badges 5
  • Perhaps a better title would be more appropriate? – Daniel Cheung Commented Mar 4, 2016 at 15:09
  • 4 I have googled and read about data types. Stop assuming people do not use google. In the future people are going to google a query that yields this question and waste their time reading your cliche "google it" response instead of just answering the question. – Bar Akiva Commented Mar 4, 2016 at 15:10
  • 2 Personally I think the error message should read "a is not declared", it would certainly make it clearer than "not defined"... :) – Niet the Dark Absol Commented Mar 4, 2016 at 15:12
  • meta: @BarAkiva "just google it" ments are not allowed on Stackoverflow because they're not useful. That being said, some proof is usually expected from the askee to show that they have already looked for answers elsewhere and not find anything. I'm not sure how much that applies here but this, in a nutshell, is the stackoverflow policy. – Halcyon Commented Mar 4, 2016 at 15:14
  • Indeed. I see no reason why they would label it like that because it made me think there is some secret "undefined" I have yet to read about. – Bar Akiva Commented Mar 4, 2016 at 15:15
Add a ment  | 

2 Answers 2

Reset to default 14

The first code is treated as follow, because of hoisting.

var a; // Declare the variable

// Move function definitions to the top
function b() {
    console.log("Called b!");
}
b();
console.log(a); // Undefined, no value assigned yet

a = "Hello World!";

console.log(a); // Hello World!

In the second code a is never defined. And trying to access such variables will result in throwing ReferenceError.

Here's a blog to read more about hoisting.

The simple rule is:

  1. If variable is declared and not assigned any value it's undefined
  2. If variable/function is not defined and attempting to use it will throw Reference Error

It's all about hoisting.

Basically your A block gets interpreted by Javascript as:

// Variable is declared, but without a value (undefined)
var a;

b();
console.log(a);

a = "Hello World!";

function b() {
  console.log("Called b!");    
}

So that's why you get an error in the second case: variable a is not defined anywhere.

发布评论

评论列表(0)

  1. 暂无评论